참조 :
Spring MVC 9장
springmodules의 valang을 활용한 Validation 테스트
Where is ErrorsVerifier class mentioned in Expert Spring MVC?

본문에서 Validator를 테스트 하는 방법을 소개하고 있습니다.

public class PersonValidatorTests extends TestCase {
    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 다운dm231.java

ErrorsValidator를 사용한 예제 코드

public class MemberInfoValidatorTest extends TestCase{

    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 에 나온 코드는 컴파일 에러가 나지 않을까 싶네요;; 클레스파일이 없기도 없거니와 인너 클래스의 사용이 이상해요. 중괄호 연속 두 개씩.. 대체 무슨 의미인건지;;; 어떻게 하라는건지~ㅋㅋ