Android 用浓缩咖啡测试多种活动
是否可以使用android espresso框架跨多个活动编写测试?完全可以编写跨多个活动的espresso(或任何基于仪器的)测试。您必须从一个活动开始,但可以通过应用程序的UI导航到其他活动。唯一的警告-由于安全限制,测试流必须留在应用程序的进程内。是的,这是可能的。在其中一个样本中,他们在这里演示了这一点 阅读内联注释Android 用浓缩咖啡测试多种活动,android,testing,android-espresso,Android,Testing,Android Espresso,是否可以使用android espresso框架跨多个活动编写测试?完全可以编写跨多个活动的espresso(或任何基于仪器的)测试。您必须从一个活动开始,但可以通过应用程序的UI导航到其他活动。唯一的警告-由于安全限制,测试流必须留在应用程序的进程内。是的,这是可能的。在其中一个样本中,他们在这里演示了这一点 阅读内联注释 等待新活动加载是由浓缩咖啡隐式处理的。我已经进行了如下测试: onView(withId(R.id.hello_visitor)).perform(click()); pr
等待新活动加载是由浓缩咖啡隐式处理的。我已经进行了如下测试:
onView(withId(R.id.hello_visitor)).perform(click());
pressBack();
onView(withId(R.id.hello_visitor)).check(matches(isDisplayed())); //fails here
显然,单击操作会启动一个新活动。假设您有两个活动:HomeActivity和SearchResultsActivity。 对于测试,您希望对HomeActivity执行一些操作,并验证SearchResultsActivity的结果。然后,测试将编写如下:
public class SearchTest extends ActivityInstrumentationTestCase2<HomeActivity> {
public SearchTest() {
super(HomeActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
getActivity(); // launch HomeActivity
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testSearch() {
onView(withId(R.id.edit_text_search_input)).perform(typeText("Hello World"));
onView(withId(R.id.button_search)).perform(click());
// at this point, another activity SearchResultsActivity is started
onView(withId(R.id.text_view_search_result)).check(matches(withText(containsString("Hello World"))));
}
}
公共类SearchTest扩展了ActivityInstrumentationTestCase2{
公共搜索测试(){
超级(家庭活动类);
}
受保护的void setUp()引发异常{
super.setUp();
getActivity();//启动HomeActivity
}
受保护的void tearDown()引发异常{
super.tearDown();
}
公共void testSearch(){
onView(带id(R.id.edit_text_search_input)).perform(typeText(“Hello World”));
onView(带id(R.id.button_search)).perform(click());
//此时,另一个活动SearchResultsActivity启动
onView(带id(R.id.text\u view\u search\u result))。检查(匹配项(带text(containssString(“Hello World”))));
}
}
因此,您唯一需要关心的是,您应该从ActivityInstrumentationTestCase2扩展测试类,并在构造函数中调用super(FirstActivity.class)
上面的例子相当简单
高级示例(发生startActivityForResult时):
有时编写一个测试确实令人困惑,因为您仍然有两个活动a和B,并且应用程序流程与上面的不同:
即使整个测试部分发生在活动B上,您可能只需要验证活动A上的一小部分,但是您的测试应该从活动A扩展到活动InstrumentationTestCase2,即活动A,而不是活动B。否则,当测试部分完成时,活动A将不会恢复,您没有机会验证您的结果。我如何断言,一旦我单击了一个小部件,就打开了正确的活动?就像应用程序用户所做的那样-断言显示了该活动的特定视图。可能太快了,您需要等待活动显示。现在还可能吗?加浓咖啡2。我有一些类似的应用程序,当用户按下文件时,它会移动到另一个活动,我需要测试该UI。有什么想法吗?@aq我已经很久没有喝浓缩咖啡了。我建议大家看看浓缩咖啡2的例子。是的,它现在对我有用。我能做我想做的所有事情。
public class SearchTest extends ActivityInstrumentationTestCase2<HomeActivity> {
public SearchTest() {
super(HomeActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
getActivity(); // launch HomeActivity
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testSearch() {
onView(withId(R.id.edit_text_search_input)).perform(typeText("Hello World"));
onView(withId(R.id.button_search)).perform(click());
// at this point, another activity SearchResultsActivity is started
onView(withId(R.id.text_view_search_result)).check(matches(withText(containsString("Hello World"))));
}
}