본문 바로가기

내일 배움 캠프

2024-01-09

오늘은 프로젝트 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