我尝试在tutorial之后的测试中使用空闲资源。
问题是要测试的代码已经在onCreate()
方法中运行。
在这个(旧的)question中,建议在@Before
注解方法中注册空闲资源,但这并不能解决问题,因为我们仍然需要Activity的示例来进行注册:
private ActivityScenario<MyActivity> scenario;
private IdlingResource myIdlingResource;
@Before
public void setUp() {
scenario = ActivityScenario.launch(MyActivity.class); // all the code in onCreate() (and also onStart() and onResume()) will run now and idling resource will be null
scenario.onActivity(activity -> {
// now we have a reference to the activity under test but it is already too late;
// this method can not be called before the activity is launched
myIdlingResource= activity.getIdlingResource();
IdlingRegistry.getInstance().register(myIdlingResource);
});
}
@Test
public void test() {
// assert stuff that happens when activity is created
}
在这种情况下如何使用空闲资源?
1条答案
按热度按时间vlurs2pr1#
问题是,被测活动和测试活动都需要使用相同的空闲资源。
我最终提出了一个使用依赖项注入的解决方案,因为我已经在项目中使用了Dagger,并且还使用它来注入模拟依赖项以用于测试目的。
我在测试模块中注入了一个真实的的空闲资源:
我为生产代码注入了一个空的空闲资源,以确保空闲资源代码不会在生产中被调用(最好是有一个IdlingResource的自定义实现,它什么也不做):
为了使测试工作而必须添加生产代码,并且在生产中使用模拟,在测试中使用真实的实现,这仍然感觉有点奇怪,但至少这使我的测试工作(而不必诉诸像
Thread.sleep()
这样的激烈手段......