如何搭建手机网站,东莞网站建设周期,西安百度关键词包年,中扶建设网站文章目录 前言解决单元测试 mock final类报错1. 报错原因2. 解决方案3. 示例demo4. 扩展 前言 如果您觉得有用的话#xff0c;记得给博主点个赞#xff0c;评论#xff0c;收藏一键三连啊#xff0c;写作不易啊^ _ ^。 而且听说点赞的人每天的运气都不会太差#xff0… 文章目录 前言解决单元测试 mock final类报错1. 报错原因2. 解决方案3. 示例demo4. 扩展 前言 如果您觉得有用的话记得给博主点个赞评论收藏一键三连啊写作不易啊^ _ ^。 而且听说点赞的人每天的运气都不会太差实在白嫖的话那欢迎常来啊!!! 解决单元测试 mock final类报错
1. 报错原因
如果mock final类的话会报下面的错误。 原因是 Mockito 默认不支持 final 类和 final 方法的 mock因此无法直接使用传统的 Mockito 进行 mock 。
2. 解决方案
因为我的项目使用的springBoot 版本为2.3.4因此我对应的mockito-core版本为3.12.4
dependencygroupIdorg.mockito/groupIdartifactIdmockito-core/artifactIdversion3.12.4/versionscopetest/scope
/dependency因此对于该版本我只能使用 PowerMock 的方式来进行 mock final类。 对应的pom:
dependencygroupIdorg.powermock/groupIdartifactIdpowermock-module-junit4/artifactIdversion2.0.9/versionscopetest/scope
/dependency
dependencygroupIdorg.powermock/groupIdartifactIdpowermock-api-mockito2/artifactIdversion2.0.9/versionscopetest/scope
/dependency3. 示例demo
测试类:
public class TestController {Autowiredprivate TestOneService service;public void yyyy(HttpServletResponse response){HSSFWorkbook yyyy service.yyyy();try {ServletOutputStream outputStream response.getOutputStream();yyyy.write(outputStream);outputStream.close();} catch (Exception e) {e.printStackTrace();}}
}单元测试类: RunWith(PowerMockRunner.class)
PrepareForTest({HSSFWorkbook.class})
PowerMockIgnore({javax.net.ssl.*,javax.management.*})
public class TestControllerTest {InjectMocksTestController testController;MockTestOneService service;Testpublic void test() throws IOException {HttpServletResponse response Mockito.mock(HttpServletResponse.class);ServletOutputStream outputStream Mockito.mock(ServletOutputStream.class);HSSFWorkbook hssfWorkbook PowerMockito.mock(HSSFWorkbook.class);PowerMockito.when(service.yyyy()).thenReturn(hssfWorkbook);PowerMockito.when(response.getOutputStream()).thenReturn(outputStream);testController.yyyy(response);Assert.assertTrue(true);}}这里的重点在于使用PowerMockito来进行mock: HSSFWorkbook hssfWorkbook PowerMockito.mock(HSSFWorkbook.class); 同时添加 HSSFWorkbook 以支持 mock PrepareForTest({HSSFWorkbook.class}) 执行效果: 4. 扩展
如果你的 Spring Boot是 2.5 及以上版本中可以使用 Mockito 4.x 版本该版本 mocking 已经支持 final 类和 final 方法。