首页 > 解决方案 > NullPointerException:存储库的 JUnit 测试

问题描述

像这样为 Repository 编写 JUnit 测试用例是否正确?同样在运行它时,我在 Mockito.when 行得到 NullPointerException... 这是我的测试类:

@ContextConfiguration(locations = { "classpath*:resources/invoices-context.xml",
        "classpath*:resources/invoices-int-schema.xml" })
public class RoomRepositoryTest {

    @Autowired
    RoomRepository roomRepository;

    private RoomEntity roomEntity;

    @Test
    public void findRommByDateTest() throws ParseException {
        String startDate = "27-07-2020";
        sDate = new SimpleDateFormat("dd-mm-yyyy").parse(startDate);
        String endDate = "28-07-2020";
        eDate = new SimpleDateFormat("dd-mm-yyyy").parse(endDate);
        String roomType = "SINGLE";

        roomEntity = new RoomEntity();
        roomEntity.setRoomId(1);
        roomEntity.setRoomPrice(6000);
        roomEntity.setRoomStatus("AVAILABLE");
        roomEntity.setRoomType("SINGLE");
        Mockito.when(
                roomRepository.findRoomByDate(Mockito.any(Date.class), Mockito.any(Date.class), Mockito.anyString()))
                .thenReturn(roomEntity.getRoomId());
        int id = roomRepository.findRoomByDate(Mockito.any(Date.class), Mockito.any(Date.class), Mockito.anyString());
        assertEquals(1, id);
    }
}

标签: spring-bootjunitspring-data-jpa

解决方案


您可以使用带有一些注释的嵌入式数据库设置,而不是模拟数据库获取功能。它帮助我们有效地测试查询。如果您首先使用内存数据库(嵌入式),则必须在表中添加(保存)条目。然后你的查询函数应该获取数据。借助此功能,您可以轻松调试空指针异常。

例如:

@SpringBootTest
@AutoConfigureTestDatabase
@ContextConfiguration(locations = { "classpath*:resources/invoices-context.xml",
        "classpath*:resources/invoices-int-schema.xml" })
public class RoomRepositoryTest {

    @Autowired
    RoomRepository roomRepository;

    private RoomEntity roomEntity;

    @Test
    public void findRommByDateTest() throws ParseException {
        String startDate = "27-07-2020";
        sDate = new SimpleDateFormat("dd-mm-yyyy").parse(startDate);
        String endDate = "28-07-2020";
        eDate = new SimpleDateFormat("dd-mm-yyyy").parse(endDate);
        String roomType = "SINGLE";

        roomEntity = new RoomEntity();
        roomEntity.setRoomId(1);
        roomEntity.setRoomPrice(6000);
        roomEntity.setRoomStatus("AVAILABLE");
        roomEntity.setRoomType("SINGLE");

        //adding data for testing  
        roomRepository.save(roomEntity)
        
        //test the actual function
        int id = roomRepository.findRoomByDate(sDate,eDate);
        assertEquals(1, id);
   
}

推荐阅读