我有一个带有 3 个方法的服务类,服务类也使用了一些 @Autowired 注释。在 3 种方法中,我想模拟两种方法,但对第三种方法使用真实方法。
问题是:
- 如果我将@Autowired 与@Spy 一起使用,则会调用所有三个实际方法实现。
- 如果我只使用@Spy,调用真正的方法会返回空指针,因为没有初始化自动装配对象。
原文由 Shashi K Kalia 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个带有 3 个方法的服务类,服务类也使用了一些 @Autowired 注释。在 3 种方法中,我想模拟两种方法,但对第三种方法使用真实方法。
问题是:
原文由 Shashi K Kalia 发布,翻译遵循 CC BY-SA 4.0 许可协议
我自己也很惊讶,但这确实对我们有用。我们有很多地方,例如:
@Spy
@Autowired
private FeatureService featureService;
我想我知道你为什么会面临这个问题。这与注入无关,而是关于 when(bloMock.doSomeStuff()).thenReturn(1)
vs doReturn(1).when(bloMock).doSomeStuff()
。请参阅:http: //www.stevenschwenke.de/spyingWithMockito
非常重要的区别是第一个选项实际上会调用 doSomeStuff()- 方法,而第二个选项不会。两者都会导致 doSomeStuff() 返回所需的 1。
原文由 yuranos 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
我知道这两个选项: