4 java junit unit-testing mockito
我必须处理一个没有测试的遗留应用程序。因此,在开始重构之前,我想确保一切都按原样运行。
现在想象一下以下情况:
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) {
....
}
Run Code Online (Sandbox Code Playgroud)
现在我想确保受保护的方法也被调用
所以我这样做了
@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);
}
Run Code Online (Sandbox Code Playgroud)
我得到一个失败的测试,并且“想要但没有调用......” someOtherMethod()。我直接进入调试模式并进行检查。这个方法就被调用了!
这可能是什么原因造成的?我在这里滥用间谍了吗?
编辑:我想扩展一下,我知道这不是您通常测试的内容,特别是因为someOtherMethod(...)这里有一个非空返回值。但想象一下返回值是void......
基本上我只是想了解为什么间谍在这里失败。