如何使用Espresso等待另一个活动启动?

6

当按钮被点击时,我该如何编写一个等待Activity启动的测试用例呢?

我的测试用例非常简单:

public void testStartsNewActivity() {
   onView(withId(R.id.button)).perform(click());
   // assert new Activity is launched
}

感谢您的选择!

你想等到点击后应该打开的活动启动吗? - Anna
2个回答

1
断言新的活动已经启动就像断言属于该新活动的视图显示在屏幕上一样容易。
查看this获取更多示例。附加信息:
默认情况下,Espresso 等待当前消息队列中的 UI 事件处理和默认的 AsyncTasks* 完成,然后才继续执行下一个测试操作。这应该能解决大部分应用程序/测试同步问题。
因此,鉴于您的“非常简单”的测试用例,我假设没有等待自定义资源加载,并且断言一个视图是否显示就足够了。

2
链接现在已经失效。 - Chota Bheem

0

您可以尝试使用espresso-intents库来检查是否确实发送了意图。此外,您还可以检查此意图是否包含所有所需的额外信息,并且该意图具有正确的操作。这是比之前更灵活的答案,因为它不依赖于视图,例如,您可能无法访问视图,但可以检查是否启动了某些系统活动(某些设置)或来自您没有直接访问权限的库的活动。因此,示例代码可能如下:

public void testStartsNewActivity() {
   onView(withId(R.id.button)).perform(click());
   intended(allOf(hasComponent(ActivityToBeOpened.class.getName())));
   // or if you know the package
   intended(toPackage("com.android.phone"))
}

如果您想知道如何准确地等待一个活动被显示,我建议您参考this指南。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接