예상과 달리 IllegalArgumentException이 아닌 java.lang.NullPointerException 오류가 발생하였다.
adminDonationEventRepository.findById(any(Long.class)) 메소드는 Optional를 반환한다.
실제 코드에서 orElseThrow를 사용하여 Optional 값이 null일 경우 IllegalArgumentException을 발생시키려고 했지만 하지만 테스트 코드에서는 다음과 같이 null 값을 반환하도록 모킹하여서 문제가 발생하였다.
@Transactional
public ResponseEntity<MessageDto> updateDonationEvent(Long donationId, BookDonationEventRequestDto bookDonationEventRequestDto) {
BookDonationEvent bookDonationEvent = adminDonationEventRepository.findById(donationId).orElseThrow(
() -> new IllegalArgumentException("해당 이벤트가 존재하지 않습니다.")
);
bookDonationEvent.update(bookDonationEventRequestDto);
return ResponseEntity.ok(new MessageDto("이벤트 수정이 완료되었습니다"));
}
@Test
void updateDonationEvent_Event_is_Null() {
// given
when(adminDonationEventRepository.findById(any(Long.class))).thenReturn(null);
// when
// then
assertThrows(IllegalArgumentException.class,
() -> adminDonationEventService.updateDonationEvent(1L,new BookDonationEventRequestDto()));
}
위의 모킹 구문을 Optional.empty()를 반환하도록 수정한다.
when(adminDonationEventRepository.findById(any(Long.class))).thenReturn(Optional.empty());