목표

  • Spring MVC에서 컨트롤러의 파라미터로 사용되는 dto들의 어노테이션 기반 validation을 단위 테스트한다.
  • @SpringBootTest 등을 사용해서 테스트가 느려지게 하지 않는다.

방법

  • dto를 검증하기위해서는 Validator가 필요하다.
    • ValidatorValidatorFacotry를 통해서 생성할 수 있다.
val validatorFactory = Validation.buildDefaultValidatorFactory()  
val validator = validatorFactory.validator
  • 아래와 같은 User 클래스가 있다면, validator를 통해서 검증을 통과했는지 테스트 해볼 수 있다.
import jakarta.validation.constraints.AssertTrue;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import jakarta.validation.constraints.Email;

public class User {

    @NotNull(message = "Name cannot be null")
    private String name;

    @AssertTrue
    private boolean working;

    @Size(min = 10, max = 200, message 
      = "About Me must be between 10 and 200 characters")
    private String aboutMe;

    @Min(value = 18, message = "Age should not be less than 18")
    @Max(value = 150, message = "Age should not be greater than 150")
    private int age;

    @Email(message = "Email should be valid")
    private String email;

    // standard setters and getters 
}
// test code

Set<ConstraintViolation<User>> violations = validator.validate(user);
assertThat(violations).hasSize(4)
for (ConstraintViolation<User> violation : violations) {
	// ...
}

참고 자료