我有一项活动。它可能需要许多碎片。首先,它需要一个具有列表视图的MyFeed片段。列表视图的模型取自网络。我可以单击列表中的一个项目。当我点击其中一个项目时,会出现EndFragment。 Endfragment还需要一个来自网络的模型。
所以我需要两个闲置资源。
这是我的测试场景。
因为我需要等待网络请求,所以我制作了MyfeedListIdlingResource。
private class MyfeedListIdlingResource implements IdlingResource {
private ResourceCallback mResourceCallback;
@Override
public String getName() {
return MyfeedListIdlingResource.class.getName();
}
@Override
public boolean isIdleNow() {
boolean ready = mActivityRule.getActivity().myfeedListReady();
return ready;
}
@Override
public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
mResourceCallback = resourceCallback;
}
}
这是我的测试代码。(我已经在MyfeedListIdlingResource上面注册了)
// step 1. Click first item in the listview. This brings Endfragment
onData(withValue("POST"))
.inAdapterView(withId(R.id.fm_listview))
.atPosition(0)
.perform(click());
// step 2. Click a view in EndFragment
onView(withId(R.id.btnComment)).perform(click());
在这个测试代码中,第1步传递得很好,因为我注册了MyfeedListIdlingResource。但是在第2步中它出现了错误代码。
资源com.naver.android.pholar.StickerCommentTest $ MyfeedListIdlingResource isIdleNow()返回true,但是从未发送过指示资源已从busy转为idle的消息。
我该如何处理这种情况? (如果我使用Thread.sleep(),那么测试代码进展顺利)
答案 0 :(得分:1)
如果使用onData语句,则不需要IdlingResource。 Espresso将加载您的列表并导航到必要的项目本身。所以这就是你收到这个错误的原因。似乎你应该简单地删除你的空闲资源,如果没有它,它将很好地工作。
如果你想在测试中使用基于时间的延迟,最好不要使用Thread.sleep(),而是使用IdlingResource,因为它描述为here