Spring Boot에서 Controller 계층의 메서드를 테스트하던 중 NullPointerException
이 발생했다.
@RequestParam
을 사용하여 요청 파라미터를 받아오는 과정에서 파라미터의 기본값이 null
로 설정되어 있었고, 이로 인해 테스트 중에 null
값이 메서드로 전달되었다.
Mockito를 사용하여 서비스 계층의 메서드를 모의(Mock)할 때 any(클래스.class)
형태로 작성하였지만, 실제로는 null
값이 전달되어 문제가 발생했다.
@RequestParam
의 기본값이 null
로 설정되어 있고, Mockito를 사용하여 서비스 계층의 메서드를 모의할 때 any(클래스)
를 사용했기 때문에, null
값을 받아들일 수 없었다.
디버거를 사용하여 실제로 어떤 값이 메서드로 전달되는지 확인했다.
이 과정에서 null
값이 전달되는 것을 확인하고, Mockito의 when
구문에서 사용하는 any()
메서드를 any(클래스)
에서 any()
로 변경하여 문제를 해결할 수 있었다.
any()
메서드는 어떤 타입이나 값이든 받아들일 수 있기 때문에, null
값도 문제없이 처리할 수 있다.
@Test
void bookDonationEventOnlyV3() throws Exception {
//given
// when
when(bookDonationEventService.getDonationEventOnlyV3(any(PageRequest.class),any(Long.class),any(LocalDate.class),any(LocalDate.class)))
.thenReturn(BookDonationEventOnlyPageResponseDto.builder().bookDonationEventOnlyResponseDtos(new ArrayList<>()).build());
when(bookDonationEventService.getDonationEventOnlyV3(any(),any(),any(),any()))
.thenReturn(BookDonationEventOnlyPageResponseDto.builder().bookDonationEventOnlyResponseDtos(new ArrayList<>()).build());
//then
mockMvc.perform(get("/users/bookDonationEvent/v3"))
.andExpect(status().isOk())
.andExpect(view().name("/users/bookDonationEventV2"));
}