【发布时间】:2023-03-15 16:46:02
【问题描述】:
我必须处理没有测试的遗留应用程序。所以在我开始重构之前,我想确保一切正常。
现在想象以下情况:
public SomeObject doSomething(final OtherObject x, final String something) {
if(x != null) {
final String = someOtherMethod(x, something);
}
}
protected String someOtherMethod(final OtherObject x, final String something) {
....
}
现在我想确保也调用了受保护的方法
所以我这样做了
@InjectMocks // Yes there is more going on here
private MyTestObject myTestObject;
private MyTestObject spy;
private static final OtherObject VALID_OTHER_OBJECT = new OtherObject();
@Before
public void setup() {
this.spy = Mockito.spy(myTestObject);
}
@Test
public void ifOtherObjectIsNotNullExpectSubMethodToBeCalled() {
myTestObject.doSomething(VALID_OTHER_OBJECT, null);
verify(spy).someOtherMethod(VALID_OTHER_OBJECT, null);
}
someOtherMethod() 的测试失败并显示“需要但未调用...”。
我直接进入调试模式并检查。调用那个方法!
这可能是什么原因?我在这里误用了间谍吗?
编辑:我想强调一下,我知道这不是您通常测试的内容,特别是因为 someOtherMethod(...) 在这里有一个非 void 返回值。但是想象一下返回值是void...
基本上我只是想了解为什么间谍在这里失败了。
【问题讨论】:
标签: java unit-testing junit mockito