gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:42:17 33 4
gpt4 key购买 nike

我有以下接口(interface)CatalogVersionService,它公开了一些服务。我还有一个单元测试,它通过使用 Mockito 来模拟这个接口(interface),如下所示:

CatalogVersionService catalogVersionService  = Mockito.mock(CatalogVersionService.class);

并将catalogVersionService注入(inject)名为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

到目前为止,一切正常,直到我尝试创建集成测试并摆脱模拟的 CatalogVersionService 接口(interface)。据我所知,Mockito.mock 创建给定类或接口(interface)的模拟对象,在本例中,CatalogVersionServiceDefaultCatalogVersionService 实现。因此,当我尝试获取真实对象时,我会执行以下操作:

catalogVersionService = new DefaultCatalogVersionService();
((DefaultClassificationClassResolverService) ccrservice).setCatalogVersionService(catalogVersionService);

但是,在那之后我遇到了空指针异常,并且我的解析器测试当然失败了。那么 Mockito.mock 到底做了什么?这是一个很好的假设方法吗:

CatalogVersionService catalogVersionService  = Mockito.mock(CatalogVersionService.class);
// IS EQUIVALENT TO:
catalogVersionService = new DefaultCatalogVersionService();

对于断言失败的原因有什么想法吗?

提前致谢

最佳答案

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

如果您在使用具体的 DefaultCatalogVersionService 时遇到 NullPointerException,这表明 DefaultCatalogVersionService 中的某些内容为空!

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

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

关于java - Mockito.mock 做了什么以及为什么在摆脱 Mockito 时该实现不起作用的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6032898/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com