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 测试,如果不是,您可以尝试在 TestApp 类中使用自定义 TestRunner,如 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 - 可以将菜单项添加到窄屏幕上的选项卡式操作栏吗?

testing - 有人用sikuli做测试工具吗?

ruby-on-rails - 从父 Factory Girl 工厂访问子属性

java - 用数据填充 ResultSet 的简单方法

java - 我的第一个应用程序不工作,它崩溃了 : UnsupportedOperationException

java - Android 错误 - 致命异常 : main

android - 如何判断屏幕是否在android中打开?

unit-testing - 在 https ://ci. teSTLing.com/with Karma.js 上运行测试?

javascript - 使用 Jest 模拟简单的内部函数以在渲染的 React 组件中使用

c# - 我如何模拟 Elmah 的 ErrorSignal 例程?