junit - 在junit中模拟DAO层中的特定方法
问题描述
我有一个带有 rest api 端点的应用程序。我想为此编写测试用例。它遵循 MVC 架构。对于其中一个端点,我想在我的 DAO 类中模拟一个方法。
我的测试类的示例代码是:
RequestBuilder requestGetBuilder = MockMvcRequestBuilders
.get("/processcal/getdata/srn/{srn}",1000)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON);
该控制器将调用具有该方法的 DAO 层进行模拟。我尝试在我的测试配置类中使用如下模拟:
@Bean
@Primary
BookMarkDao bookMarkDao() {
final BookMarkDao bookMarkDao = Mockito.mock(BookMarkDao.class);
Mockito.when(bookMarkDao.fetchMrPostProcessCalc(Mockito.anyString()))
.thenReturn(TestUtils.getMockResponse());
return bookMarkDao;
}
这样做的问题是它在模拟整个 DAO bean,因此对于其他端点,它不调用 DAO 类方法,并且我的测试覆盖率降低了。有没有办法解决这个问题?
解决方案
您可以为模拟 bean 使用特定配置文件,并在必要的测试用例中激活此配置文件。顺便说一句,如果您的应用程序基于 spring-boot,那么您可以使用 @MockBean 而不是在测试配置中手动模拟您的 DAO。
推荐阅读
- python - 协议中的 CRC 计算不正确。一种是使用zlib实现的,另一种是在函数中计算的
- python-3.x - 功能完成后如何销毁顶层窗口?
- cgal - CGAL:join_facet() 对循环器的真正作用是什么?
- java - 如何打印、排序和获取高于 90 的温度
- java - 如何在 Android Studio 3.4 中复制和重命名项目?
- reactjs - 不能在回调中调用 React Hook “useInterval”
- bash - 启动 AWS EC2 实例、运行命令、将日志流式传输到控制台并终止
- r - 基于来自其他列的字符串的虚拟变量列
- visual-studio-code - Can I see, and individually disable, keyboard shortcuts for extensions, such as the Sublime Text Keymap extension?
- android - 使用 JSON 在 Google Maps API 中设置位置并保存最后一个已知位置