Android - 仪表测试期间应用程序的模拟方法

时间:2018-04-23 12:28:56

标签: android testing mocking mockito android-espresso

假设我的Application类如下:

import android.app.Application;

public class MyApp extends Application {

    public String example(){
        return "Test";
    }

}

我有一些用于测试UI的检测测试。假设我有以下测试:

public class MyMainActivityTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(
            MainActivity.class);

    @Test
    public void firstTest(){
       onView(withId(R.id.textBt)).perform(click());
       // ...
    }
}

我想在example()内模仿MyMainActivityTest方法,让我们说它应该返回Mock Test而不是Test。怎么做?

1 个答案:

答案 0 :(得分:1)

您应该创建扩展Application类并将其放入测试文件夹的类。

    public class MyTestApp extends MyApp {

    public String example(){
        return "SuperTest";
    }
}

然后在您的测试类中使用Robolectric库中的@Config Annotation:

@Config(application = MyTestApp)

这适用于所有类型的测试,包括Espresso UI测试,如果您不能尝试将自定义TestRunner与您的TestApp类this一起使用:

public class MyRunner extends AndroidJUnitRunner {
  @Override
  public Application newApplication(ClassLoader cl, String className, Context context)
      throws Exception {
    return super.newApplication(cl, MyTestApp.class.getName(), context);
  }
}

将它放在Test类上: @RunWith(MyRunner.class)