Android 单元测试 - 模拟内部 class 方法

Android Unit test - mock inner class method

Class A 有一个创建 class B 的新实例并调用 Android API 功能的方法。

Class A{

    public void foo(){
        B b = new B();

        //some code

        b.callAndroidAPI()

        //some code

    }
}

如何对 class b foo() 方法进行单元测试。在调用 foo() 之前,有什么方法可以 override/mock 调用 AndroidAPI() 吗? 谢谢!

您可以将 "new" 创建移动到另一个方法,然后用 mock 覆盖该方法:

Class A {

B getB() {
  return new B();
}

public void foo(){
    B b = getB();

    //some code

    b.callAndroidAPI()

    //some code

}

}

然后在您的测试中,您可以覆盖 getB 调用。

@Test
public void testBFoo() {
    A a = new A() {
        B getB() {
          return bMocked;
        }
    }

    // verify interactions
}

此外,我最近写了这篇文章:http://www.adavis.info/2015/11/testing-tricks-1-dealing-with-new.html