Today I Learned
(24.06.17)[10주차] Validator 객체 생성과 테스트 코드에서의 활용
Validation을 사용하면 단순하게 예외가 발생되고 던져지는 것 뿐만아니라, Validator라는 객체로 Validation적용이 된 필드를 검증할 수도 있다.
테스트 코드를 작성하는 과제에서 사용하기 위해 미리 찾아보고 학습한 것으로 정리
Validator 객체 & Validator로 테스트코드에서의 검증
- 엔터티 또는 DTO에서의 필드를 Spring Boot의 Validation의 Annotation을 통해 코드가 작성이 되었고, @Validated와 @Valid를 통해서 필드의 유효성이 코드 진행에서 검사가 진행이 될 수 있음
- 그렇다면, 이것을 따로 검사할 수 있는 방법, 그리고 이 방법을 통해서 Validation에 대해 필드의 검증을 테스트 코드에서 쓸 수 있는 방법으로 Validator 객체를 사용할 수 있고 이를 정리
Validation 적용 DTO 예시
public class FeedReqDto {
@NotBlank
private String contents;
}
- @NotBlank 의 Validastion Annotation으로 contents 필드는 빈 칸으로 Request 받을 수 없음
Validator 객체
- 데이터 입력값에 유효성을 다시 검증하기 위해 필요한 객체
Validator 객체 생성
- Validation을 사용할 때 사용되었던, Java의 Bean Validastion API 를 활용해서 생성
- 생성 Flow
- Bean Validastion API 를 통해서 ValidationFactory를 생성
- ValidationFactory를 사용해서 Validator 객체 가지고오기
@BeforeEach
void setUp() {
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
validator = validatorFactory.getValidator();
}
- Test Code 중 Validation 유효성 검사를 위해서 BeforeEach 를 통해 검증을 할 Validator객체를 지정하는 setUp()
.buildDefaultValidationFactory()
- Validation 클래스에서 ValidationFactory를 생성할 때 필요한 메서드
.getValidator()
- Validation Factory에서 Validator객체를 생성할 때 필요한 메서드
Validator로 검증하기
// when
...
Set<ConstraintViolation<FeedReqDto>> validatedSet = validator.validate(feedReqDto);
...
- Test Code에서 when에서 검증하는 코드
.validate(검증할 객체)
- validator가 해당 객체를 검증할 때 필요한 메서드
- 검증을 끝난 다음에는 ConstraintViolation<T> 인터페이스 구현체가 검증할 객체의 위반 사항들을 Set 자료구조료 반환
- 객체의 각 필드에 적용된 Validation Annotation들(@NotBlank, @Size 등등) 에 관한 위반정보를 담고 있음
Test Code에서의 검증
// then
...
assertEquals("contents", violation.getPropertyPath().toString(), "@NotBlank Validation 적용이 안되었습니다.");
...
- 위 코드에서의 violation은 violationSet 중 하나로 가정
ConstraintViolation의 주요 메서드
- getPropertyPath() : 유효성 검사 위반 속성의 경로=필드 을 반환
- 위에선 "contents' 필드가 반환 되고, assertEquals로 검증을 진행하는 코드
- Path 타입이 때문에, toString() 으로 캐스팅 해주면, 필드 이름을 얻을 수 있음
- getMessage() : 유효성 검사 위반되었을 때, 위반한 메시지를 반환
- @NotBlank(message = "해당 필드를 작성해주세요") 이렇게 커스텀 해놓는다면, getMessage()로는 "해당 필드를 작성해주세요" 메시지 String반환
- getInvalidValue() : 유효성 검사 위반된 속성의 그 값을 반환
- Object타입으로 반환
'Today I Learned' 카테고리의 다른 글
(24.06.19)[10주차] Mockito 구문 (0) | 2024.06.19 |
---|---|
(24.06.18)[10주차] Reflection & ReflectionTestUtils을 통한 필드 다루기 (0) | 2024.06.18 |
(24.06.14)[9주차] Servlet 객체 활용하기 (0) | 2024.06.14 |
(24.06.13)[9주차] Spring 심화 강의 02 (마무리) (1) | 2024.06.13 |
(24.06.12)[9주차] Spring 심화 강의 01 (0) | 2024.06.12 |