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

标签 android testing mocking mockito android-espresso

假设我的应用程序类如下:

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());
       // ...
    }
}

我想在 MyMainActivityTest 中模拟 example() 方法,假设它应该返回 Mock Test 而不是 Test。怎么做?

最佳答案

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

    public class MyTestApp extends MyApp {

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

然后在您的测试类上使用来自 Robolectric 库的 @Config 注解:

@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);
  }
}

然后把它放在你的测试类上: @RunWith(MyRunner.class)

关于Android - 仪器测试期间应用程序的模拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49981107/

相关文章:

android - 为什么 popBackStack() 方法没有删除我的 fragment ?

android - 在为 Android Activity 创建 View 时显示进度对话框

java - EasyMock捕获: use getValue() outside of an IAnswer

Javascript 模拟命名约定

android - 如何使我的布局能够向下滚动?

testing - 有没有好的支持VBScript的web界面测试工具?

javascript - 如何在非 angularjs 网站上使用 Protractor ?

angularjs - 从 Protractor 中的元素内部访问内部元素

.net - 模拟方法返回 null

java - 允许从 OnClickListener 非最终变量修改对象