Blog

[Spring][258] 트러블 슈팅 : Spring Boot 테스트: @RequestParam의 기본값과 Mockito any() 메서드 사용 시 주의점

Category
Author
Tags
PinOnMain
1 more property

문제

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")); }
Java
복사