Spring MVC Validation Testing
Spring MVC 9장
springmodules의 valang을 활용한 Validation 테스트
Where is ErrorsVerifier class mentioned in Expert Spring MVC?
본문에서 Validator를 테스트 하는 방법을 소개하고 있습니다.
public void testEmptyPersonValidation() {
Person person = new Person();
Validator validator = new PersonValidator();
BindException errors = new BindException(person, "target");
validator.validate(person, errors);
new ErrorsVerifier(errors) {
{
forProperty("firstName").hasErrorCode("person.firstName.required")
.forProperty("lastName").hasErrorCode("person.lastName.required")
.otherwise().noErrors();
}
}
}
}
위의 소스 코드는 Spring MVC 281페이지 그대로 입니다. 하지만 위의 코드는 선뜻 이해가 가지 않았습니다.
언뜻 봤을 때 person 객체를 두번이나 사용한 것부터 뭔가 이상하게 느껴졌으며(좀 더 보고 있으니까 바인딩 할 때 한번 검증할 때 한 번 사용하는 의도 인것 같습니다.)
ErrorsVerifier라는 익명 클레스의 사용이 낯설었습니다.
ErrorsVerifier를 사용한 것을 보면 fluent interface 개념으로 구현하여 매우 재밌고 직관적으로 작명된 메소드의 이름들을 확인할 수 있습니다. 하지만 안타깝게도 책에 나온 설명과 달리 저 클레스(?)는 spring 프레임웤에 존재하지 않습니다.
이 클레스를 찾느라 여러명이 고생한 흔적을 구글에서 찾을 수 있었는데 그 곳에서 보다 더 값진 것을 발견했습니다. 바로 뛰어난 선배님의 재미난 참여를 살펴 볼 수 있었습니다.
위 링크에 가시면 Spring에는 전혀 없던 ErrorsVerifier 코드를 만들어 낸 과정이 들어있습니다.
ErrorsValidator 다운
ErrorsValidator를 사용한 예제 코드
public void testEmptyMemberInfo() {
MemberInfo memberInfo = new MemberInfo();
Validator validator = new MemberInfoValidator();
BindException errors = new BindException(memberInfo, "target");
validator.validate(memberInfo, errors);
ErrorsVerifier errorsVerifier = new ErrorsVerifier(errors);
errorsVerifier.forProperty("name").hasErrorCode("required")
.forProperty("password").hasErrorCode("required")
.forProperty("confirmPassword").hasErrorCode("required")
.forProperty("email").hasErrorCode("required");
}
}
음~ 좋네요. 다시 보니까 Spring MVC 에 나온 코드는 컴파일 에러가 나지 않을까 싶네요;; 클레스파일이 없기도 없거니와 인너 클래스의 사용이 이상해요. 중괄호 연속 두 개씩.. 대체 무슨 의미인건지;;; 어떻게 하라는건지~ㅋㅋ
'Spring MVC > 9장 Validation' 카테고리의 다른 글
Spring MVC Validation Testing (0) | 2007.06.10 |
---|---|
Spring MVC Validation 정리 (0) | 2007.06.05 |
ValangValidatorFactoryBean -> ValangValidator (0) | 2007.06.04 |
Valang - CustomFunction (0) | 2007.06.04 |
Valang - syntex (0) | 2007.06.04 |
Declarative Validators - Valang 사용하기 (0) | 2007.06.04 |
Vlidator - Property 파일 사용하기 (0) | 2007.05.22 |
Vlidator - ValidationUtils 사용하기 (0) | 2007.05.21 |