对于任何想要的人来说,但不需要重写所有测试以在UI线程上运行,这是一种相当简单的Java方法来获取它:Activity
等待 UI
假设您要测试对话框是否在一段时间延迟后显示,钩子在UI线程上运行,这意味着在那里等待将导致对话框显示紧张。onActivity(...)
- 在这种情况下,您需要保留强引用(因为这会阻止活动关闭)。
ActivityScenario
- 测试应等待钩子被调用,然后保留传递的活动的引用。
onActivity(...)
- 最后,将测试逻辑移出钩子。
onActivity(...)
例
private ActivityScenario mActivityScenario;
@After
public void tearDown() throws Exception {
if (mActivityScenario != null) {
mActivityScenario.close();
}
mActivityScenario = null;
}
@Override
public Activity getActivity() {
if (mActivityScenario == null) {
mActivityScenario = ActivityScenario.launch(getActivityClassForScenario());
}
return tryAcquireScenarioActivity(mActivityScenario);
}
protected static Activity tryAcquireScenarioActivity(ActivityScenario activityScenario) {
Semaphore activityResource = new Semaphore(0);
Activity[] scenarioActivity = new Activity[1];
activityScenario.onActivity(activity -> {
scenarioActivity[0] = activity;
activityResource.release();
});
try {
activityResource.tryAcquire(15000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
Assert.fail("Failed to acquire activity scenario semaphore");
}
Assert.assertNotNull("Scenario Activity should be non-null", scenarioActivity[0]);
return scenarioActivity[0];
}