我的内部类如下:
public class ClassWithInnerObject {
private final InnerObject innerObject;
public ClassWithInnerObject() {
innerObject = new InnerObject();
}
public void callInnerObjectMethod() {
innerObject.outerFunc();
}
public void outerFunc() {
innerFunc();
}
public void innerFunc() {
Log.d("XXX", "innerFunc: called");
}
public class InnerObject {
public void outerFunc() {
innerFunc();
}
}
}
Mockito 测试如下所示:
构建.gradle:
androidTestCompile 'junit:junit:4.12'
androidTestCompile 'org.mockito:mockito-core:1.10.19'
androidTestCompile 'com.crittercism.dexmaker:dexmaker:1.4'
androidTestCompile 'com.crittercism.dexmaker:dexmaker-mockito:1.4'
androidTestCompile 'com.crittercism.dexmaker:dexmaker-dx:1.4'
Test:
@RunWith(AndroidJUnit4.class) public class SpyVerifyTest {
@Test public void myInnerTestWorking() {
ClassWithInnerObject p = new ClassWithInnerObject();
ClassWithInnerObject spy = Mockito.spy(p);
spy.outerFunc();
verify(spy, times(1)).innerFunc();
}
@Test public void myInnerTestNotWorking() {
ClassWithInnerObject p = new ClassWithInnerObject();
ClassWithInnerObject spy = Mockito.spy(p);
spy.callInnerObjectMethod();
verify(spy, times(1)).innerFunc();
}
}
第一次测试按预期进行。
第二个是innerFunc
从未被检测为“调用”,尽管在日志中我看到它是。出了什么问题? :)
Thanks!
怎么了?
嗯,这里的问题非常微妙,当你打电话时Mockito.spy(p)
, mockito
在幕后创建某种装饰器在您的实例上ClassWithInnerObject
允许监视实例上的所有方法调用。多亏了这一点,您可以检查给定方法被调用了多少次但仅在装饰器上不在你的实例上。在这里,当您使用内部类时,它会调用innerFunc()
在你的实例上ClassWithInnerObject
不在装饰器上,所以对于Mockito
innerFunc()
尚未被调用.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)