Mockito.mock 做了什么以及为什么在摆脱 Mockito 时此实现不起作用的建议

Bar*_*lla 0 java mockito

我有以下接口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创建给定类或接口的模拟对象,在这种情况下CatalogVersionServiceDefaultCatalogVersionService. 因此,当我尝试获取真实对象时,我会执行以下操作:

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)

任何想法为什么断言失败?

提前致谢

mat*_*t b 5

不,假设这Mockito.mock(...)与实例化您的DefaultCatalogVersionService. 这不是模拟所做的。

如果您使用的是混凝土时,得到一个NullPointerException异常DefaultCatalogVersionService,这将表明什么是内空DefaultCatalogVersionService

您是否检查了堆栈跟踪以查看 NullPointerException 发生在哪一行,这将帮助您确定哪个属性/字段为空?

您很可能DefaultCatalogVersionService依赖于其他类,而您没有在测试中连接这些类。