spring-boot - 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);
}
}
解决方案
您可以使用带有一些注释的嵌入式数据库设置,而不是模拟数据库获取功能。它帮助我们有效地测试查询。如果您首先使用内存数据库(嵌入式),则必须在表中添加(保存)条目。然后你的查询函数应该获取数据。借助此功能,您可以轻松调试空指针异常。
例如:
@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);
}
推荐阅读
- javascript - 使用 chart.js 和关联数组生成条形图
- ocaml - 如何制作函数。在 Ocaml 中,它接受两个布尔值和一个 char(操作),然后返回相应的逻辑值
- sql - 避免 SQL Pivot 返回重复行
- javascript - 为什么不同组件中的 scss 模块会覆盖我当前 React 组件中的某些 css?
- python - 如何使用 Python/Beautiful Soup 提取两个不同标签之间的文本?
- python - 无效的块标记应为“空”或“endfor”。尝试显示 ImageField 时出错
- java - 我在用 JavaFX 画叉时遇到问题
- java - AIDL 客户端未绑定到远程服务
- python - Boto3:有没有办法优雅地中断 SQS 长轮询接收消息请求?
- c# - Unity 试图在 RenderSettings.ambientskycolor 之间进行调整不起作用?