오늘은 프로젝트 6일 차이다. 오늘 진행한 내용은 다음과 같다.
1. Admin 공연장 추가 API Test, Admin 공연 추가 API 기능 구현
오늘 코드를 작성하면서 문제가 됐던 부분은 Request를 받을 때 List 부분에서 @NotNull를 사용하여 검증을 하고 있었는데 List는 생각해 보니 Request에서 List에 대한 값이 없는 상태로 요청이 올 때는 Null이 아니라 비어있는 객체로 들어오기 때문에 @NotEmpty 어노테이션을 사용해서 빈 객체인지를 체크해야 된다.
또한 테스트 코드를 작성하면서 Validation에 대해서 테스트 코드를 작성할때 테스트 하는 방식에 대해서 배웠다.
private static ValidatorFactory factory;
private static Validator validator;
@BeforeAll
public static void init() {
factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
validator를 사용하여 해당 객체의 유효성을 검사하면 violations라는 Set객체에 저장한다. 이때 사용되는 ConstraintViolation은 유효성 검사 중에 발견되는 오류를 나타내는 인터페이스이다. 발생한 오류의 세부 정보를 포함하고 있어서 어떤 부분에서 문제가 발생했는지 알려준다.
@Test
public void 요청_공연장_이름_검증_실패테스트() {
// given
String invalidName = "";
List<SeatRequest> seatRequestList = new ArrayList<>();
seatRequestList.add(new SeatRequest("A", 100));
PlaceRequest placeRequest = new PlaceRequest(invalidName, "Valid Address", seatRequestList);
// when
Set<ConstraintViolation<PlaceRequest>> violations = validator.validate(placeRequest);
// then
assertThat(violations).isNotEmpty();
violations
.forEach(
error -> {
assertThat(error.getMessage()).isEqualTo("공연장 이름은 필수입니다.");
});
}
따라서 마지막에 forEach로 violations에 저장된 오류중에서 해당하는 오류와 일치하는지 검사해서 일치하면 테스트가 통과된다.
또한 오늘 공연 API 기능을 구현하다가 Request에 LocalDateTime, LocalTime, LocalDate를 사용하는 과정에서 에러가 발생했다. 검증을 위해 기존에 @NotBlack를 사용하고 있었는데 에러가 발생했다. 이유를 알아보니 Request 과정에서는 String으로 받지만 클래스가 String이 아니기 때문에 사용할 수 없다. 따라서 다른 검증인 @NotNull 같은 어노테이션과 @JsonFomat으로 검증하는 것이 좋다.
'내일 배움 캠프' 카테고리의 다른 글
2024-01-11 (0) | 2024.01.12 |
---|---|
2024-01-10 (1) | 2024.01.11 |
2024-01-08 (2) | 2024.01.09 |
2024-01-05 (0) | 2024.01.06 |
2024-01-04 (0) | 2024.01.05 |