假设我的应用程序类如下:
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/