Тесты JUnit: разрыв вызывает исключения NullPointerExceptions

#spring-boot #junit

Вопрос:

Я учусь тестировать JUnit и в настоящее время сталкиваюсь с неожиданным NullPointerException createBook() тестом, приведенным ниже:

 @RunWith(SpringRunner.class)
@SpringBootTest(classes = MsBooks.class)
public class BookDaoTest {

    private Book book;
    @Autowired
    private BookRepository bookRepository;

    @BeforeEach
    void setup(){
        String DB = "jdbc:h2:file:~/test";
        Flyway flyway = Flyway.configure().dataSource(DB, "sa","").load();
        flyway.clean();
        flyway.migrate();
        book = new Book();
    }

    @AfterEach
    void tearDown(){
        book = null;
    }

    @Test
    public void createBook() {
        String bookAuthor = "Barbara Davis";
        String bookTitle = "The Keeper of Happy Endings";
        book.setBookIsbn("1542021472L"); // NullPointer occurs here
        book.setBookTitle(bookTitle);
        book.setBookAuthor(bookAuthor);
        book.setBookPrice(new BigDecimal(20));
        book.setBookSummary("Soline Roussel is well schooled in the business of happy endings. For generations her family has kept an exclusive bridal salon in Paris, where magic is worked with needle and thread. It’s said that the bride who wears a Roussel gown is guaranteed a lifetime of joy. But devastating losses during World War II leave Soline’s world and heart in ruins and her faith in love shaken. She boxes up her memories, stowing them away, along with her broken dreams, determined to forget");
        book.setBookPublishedDate(LocalDate.parse("2021-10-01"));
        book.setPriceCurrency("AUD");
        book.setBookImageUrl("https://m.media-amazon.com/images/I/51BbtnhHSYL.jpg");
        assertNotNull(book);
        Book newBook = bookRepository.save(book);
        assertNotNull(newBook);
        assertEquals("1542021472L", newBook.getBookIsbn());
        assertEquals(bookAuthor, newBook.getBookAuthor());
        assertEquals(bookTitle, newBook.getBookTitle());
    }
}
 

По какой-то причине book объект null возникает, когда я пытаюсь вызвать сеттеров и геттеров на нем. Я в замешательстве, потому что из того, что я понимаю, книгу следует создавать заново перед каждым тестом setup() и, следовательно, не следует null .

Я приношу извинения, если это совершенно очевидно, почему. И да, тест проходит, если я создам экземпляр объекта book в createBook() функции, хотя мне говорили, что это не очень хорошая идея.