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