我有以下接口CatalogVersionService,它公开了一些服务。我还有一个单元测试,它通过像这样使用 Mockito 来模拟这个界面:
CatalogVersionService catalogVersionService = Mockito.mock(CatalogVersionService.class);
Run Code Online (Sandbox Code Playgroud)
并catalogVersionService 在一个名为的解析器实现中注入 ,DefaultClassificationClassResolverService如下所示:
((DefaultClassificationClassResolverService) ccrservice).setCatalogVersionService(catalogVersionService);
// Assert that my resolver will find a single ClassificationClassModel object
ClassificationClassModel single = new ClassificationClassModel();
assertTrue(ccrservice.resolve(single).contains(single)); //resolver
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切正常,直到我尝试创建集成测试并摆脱 MockedCatalogVersionService界面。据我所知,Mockito.mock创建给定类或接口的模拟对象,在这种情况下CatalogVersionService由DefaultCatalogVersionService. 因此,当我尝试获取真实对象时,我会执行以下操作:
catalogVersionService = new DefaultCatalogVersionService();
((DefaultClassificationClassResolverService) ccrservice).setCatalogVersionService(catalogVersionService);
Run Code Online (Sandbox Code Playgroud)
但是,在那之后我得到了一个空指针异常,我的解析器测试当然失败了。那么 Mockito.mock 实际上是做什么的??假设是一个好方法:
CatalogVersionService catalogVersionService = Mockito.mock(CatalogVersionService.class);
// IS EQUIVALENT TO:
catalogVersionService = new DefaultCatalogVersionService();
Run Code Online (Sandbox Code Playgroud)
任何想法为什么断言失败?
提前致谢
不,假设这Mockito.mock(...)与实例化您的DefaultCatalogVersionService. 这不是模拟所做的。
如果您使用的是混凝土时,得到一个NullPointerException异常DefaultCatalogVersionService,这将表明什么是内空DefaultCatalogVersionService!
您是否检查了堆栈跟踪以查看 NullPointerException 发生在哪一行,这将帮助您确定哪个属性/字段为空?
您很可能DefaultCatalogVersionService依赖于其他类,而您没有在测试中连接这些类。
| 归档时间: |
|
| 查看次数: |
2137 次 |
| 最近记录: |