espresso:许多情况下等待的闲置资源

时间:2016-04-01 06:47:36

标签: android ui-testing android-espresso

我有一项活动。它可能需要许多碎片。首先,它需要一个具有列表视图的MyFeed片段。列表视图的模型取自网络。我可以单击列表中的一个项目。当我点击其中一个项目时,会出现EndFragment。 Endfragment还需要一个来自网络的模型。

所以我需要两个闲置资源。

这是我的测试场景。

  1. 等到列表视图的模型已经用完
  2. 点击列表视图中的第一项。
  3. Endfragment出现并使用EndFragment做点什么。
  4. 因为我需要等待网络请求,所以我制作了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(),那么测试代码进展顺利)

1 个答案:

答案 0 :(得分:1)

如果使用onData语句,则不需要IdlingResource。 Espresso将加载您的列表并导航到必要的项目本身。所以这就是你收到这个错误的原因。似乎你应该简单地删除你的空闲资源,如果没有它,它将很好地工作。

如果你想在测试中使用基于时间的延迟,最好不要使用Thread.sleep(),而是使用IdlingResource,因为它描述为here