gpt4 book ai didi

java - Mockito spy - 在 spy 对象中调用内部类方法而不是 spy 方法时

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:19:20 27 4
gpt4 key购买 nike

我的内部类如下:

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'

测试:

@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 从未被检测为“已调用”,尽管在日志中我看到它是。有什么问题吗? :)

谢谢!

最佳答案

What is wrong?

嗯,这里的问题很微妙,当你调用 Mockito.spy(p) 时,mockito 在你的 ClassWithInnerObject 允许监视实例上的所有方法调用。多亏了这一点,您可以检查给定方法被调用了多少次但仅在装饰器上而不是在您的实例上。在这里,当您使用内部类时,它会在您的 ClassWithInnerObject 实例上调用 innerFunc() 而不是在装饰器上调用 Mockito innerFunc() 尚未调用

关于java - Mockito spy - 在 spy 对象中调用内部类方法而不是 spy 方法时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39616976/

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