首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mockito间谍-当调用内部类方法时,不是间谍对象中的间谍方法

Mockito间谍-当调用内部类方法时,不是间谍对象中的间谍方法
EN

Stack Overflow用户
提问于 2016-09-21 12:46:51
回答 2查看 4.2K关注 0票数 6

我有一个内层的课程如下:

代码语言:javascript
复制
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测试如下: build.gradle:

代码语言:javascript
复制
  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'

测试:

代码语言:javascript
复制
@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从未被检测为“调用”,尽管我在日志中看到它的is.What是错误的?)

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-21 13:14:39

怎么啦?

嗯,这里的问题很微妙,当您调用Mockito.spy(p)时,mockito会在场景后面创建某种修饰器对ClassWithInnerObject实例进行某种修饰,允许监视您实例上的所有方法调用。由于这一点,您可以检查给定方法被调用了多少次,但在装饰器上只检查了,而不是在实例上。在这里,当您使用内部类时,它会在您的ClassWithInnerObject实例上调用ClassWithInnerObject,而不是在装饰器上调用,因此对于Mockito innerFunc() ,没有调用。

票数 12
EN

Stack Overflow用户

发布于 2021-03-04 13:08:23

您可以通过使用“ClassWithInnerObject.this”来解决这个问题。在内部课堂上。

代码语言:javascript
复制
public class InnerObject {
  public void outerFunc() {
    ClassWithInnerObject.this.innerFunc();
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39616976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档