我正在为我的应用编写测试用例,但是遇到了一些小问题。我的许多测试用例中都有SystemClock.Sleep
个调用,以便视图加载所有数据并将其显示在屏幕上。然而,这样做的睡眠次数越来越多,导致这些测试的时间更长。
以下是其中一项测试的示例
@Test
public void testSearch() {
ExtensionForExpresso.signUp();
SystemClock.sleep(17000);
onView(withId(R.id.menu_offer_search)).check(matches(isDisplayed())).perform(click());
SystemClock.sleep(5000);
onView(withId(R.id.menu_search)).check(matches(isDisplayed())).perform(typeText("Pizza"));
SystemClock.sleep(17000);
onView(withId(R.id.searchSectionSeeAllButton)).check(matches(isDisplayed())).perform(click());
SystemClock.sleep(15000);
onView(withId(R.id.searchResultsRecyclerView)).check(matches(isDisplayed())).perform(RecyclerViewActions.actionOnItemAtPosition(1, click()));
}
是否存在等待视图出现的睡眠替代方案?或者我是否可以添加任何方法或功能来减少SystemClock.sleep
来电的数量?
答案 0 :(得分:1)
首先,尝试使用adb shell在您的设备/模拟器上停用动画,或在Android项目中实施Espresso空闲资源:http://matgom.com/tutorial/2016/02/21/IdlingResource.html
答案 1 :(得分:0)
我建议您首先实现IdlingResource并禁用系统动画。禁用系统动画的最简单方法是this。
无需使用SystemClock.sleep()方法。相反,您可以实现这样的自定义睡眠方法:
public void waitFor(int seconds) {
seconds = seconds < 0 ? 0 : seconds;
while (--seconds >= 0) {
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后你可以在你的测试中调用它:waitFor(2); // 2 second wait