Blog

[Spring][258] 트러블 슈팅: `BookServiceTest`에서 `NullPointerException` 발생 문제

Category
Author
Tags
PinOnMain
1 more property

문제 상황

bookService 객체가 초기화되지 않아 해당 객체의 메서드를 호출할 때 NullPointerException이 발생하였다.

문제 원인

오류를 읽어보니 BookService 객체가 초기화되지 않아 null 상태여서 문제가 발생한 것을 추정된다.

해결

@InjectMocks 어노테이션 사용BookService 객체에 대해 @InjectMocks 어노테이션을 사용하여 인스턴스를 자동으로 생성하고 의존성을 주입합니다.

수정된 코드

@TestInstance(TestInstance.Lifecycle.PER_CLASS) class BookServiceTest { @InjectMocks private BookService bookService; @Mock private BookRepository bookRepository; @BeforeAll void setUp() { MockitoAnnotations.openMocks(this); } @Test void findBookByNameAndRoleAndDonationIdWithPagination() { // given BooleanBuilder builder = new BooleanBuilder(); Book book = Book.builder() .bookName("bookName") .bookAuthor("bookAuthor") .bookPublish("bookPublish") .bookStatus(BookStatusEnum.valueOf("POSSIBLE")) .build(); List<Book> books = new ArrayList<>(); books.add(book); when(bookRepository.findAll(any(BooleanBuilder.class), any(Pageable.class))).thenReturn(new PageImpl<>(books)); // when Page<Book> result = bookService.findBookByNameAndRoleAndDonationIdWithPagination("bookName", "bookAuthor", "bookPublish", "POSSIBLE", 1L, Pageable.unpaged()); // then assert(result.getTotalElements() == 1); assertThat(result.getContent().get(0).getBookName()).isEqualTo("bookName"); assertThat(result.getContent().get(0).getBookAuthor()).isEqualTo("bookAuthor"); assertThat(result.getContent().get(0).getBookPublish()).isEqualTo("bookPublish"); assertThat(result.getContent().get(0).getBookStatus()).isEqualTo(BookStatusEnum.valueOf("POSSIBLE")); } }
Java
복사

정리

단위테스트를 진행 할 때에 BookService 객체가 올바르게 초기화해야 한다. 만약 초기화 하지 않고 진행한다면 NullPointerException이 발생 할 수 있다.
@InjectMocks을 이용한다면 초기화를 하면서 동시에 테스트 코드의 가독성과 유지 보수성을 향상시킬 수 있을 것으로 추정된다.