Espresso Idling资源不起作用

时间:2015-10-14 08:38:53

标签: android android-espresso

Android espresso对测试用例非常有用。但是当我使用IdlingResource时会遇到麻烦。

我的Activity中有一个标记,每次初始完成时我会将其设置为true

所以我的IdlingResource是这样的:

/**
 * 等待所有初始化工作完成
 */
private class WaitPingSuccessIdlingResource implements IdlingResource {
    private ChoiceServerActivity choiceServerActivity;
    private ResourceCallback mResourceCallback;

    public WaitPingSuccessIdlingResource(ChoiceServerActivity choiceServerActivity) {
        this.choiceServerActivity = choiceServerActivity;
    }

    @Override
    public String getName() {
        return String.valueOf(hashCode());
    }

    @Override
    public boolean isIdleNow() {
        if (mResourceCallback != null && choiceServerActivity.isAllDataInited()) {
            mResourceCallback.onTransitionToIdle();
        }
        boolean rst = choiceServerActivity.isAllDataInited();
        Log.i("tonghu","WaitPingSuccessIdlingResource, isIdleNow(L94): rst " + rst);
        return rst;
    }

    @Override
    public void registerIdleTransitionCallback(ResourceCallback callback) {
        this.mResourceCallback = callback;
    }
}

我这样注册:

Espresso.registerIdlingResources(new WaitPingSuccessIdlingResource(activity));
Log.i("tonghu", "ChoiceServerActivityTest, testPingSuccess(L42): 2222");

通常情况下,仅当isIdleNow()返回true时才会打印第二个日志。

但现在我的日志是:

I/tonghu  (23470): WaitPingSuccessIdlingResource, isIdleNow(L94): rst false
I/tonghu  (23470): ChoiceServerActivityTest, testPingSuccess(L42): 2222

为什么我的IdlingResource闲置时可以打印第二个日志。

我的英语很差,有任何问题,请告诉我! THX!

编辑: 我已经解决了这个问题:

我看到对IdlingResource课有评论:

In such cases, test authors can register the custom resource and 
{@link    Espresso} will wait for the resource to become idle prior 
to   executing a view operation.

因此,在注册Idling资源之后,只需提供任何视图操作:

Espresso.registerIdlingResources(new  WaitPingSuccessIdlingResource(activity));
Espresso.onView(ViewMatchers.withId(R.id.list_view)).check(ViewAssertions.matches(ViewMatchers.isDisplayed()));

1 个答案:

答案 0 :(得分:1)

这里存在同样的问题,发现注册idlingResources不会导致Espresso等待,但是除了Espresso.onView之外,您仍然可以使用Espresso.onIdle()等待注册的idlingResources变为空闲状态。

最后,我找到了官方文件,引自here

  

在需要之前注册空闲资源。

     

与闲置资源相关的同步优势仅在Espresso首次调用该资源的   isIdleNow()方法。

     

以下列表显示了此属性的几个示例:

     
      
  1. 如果您在带有注释的方法中注册空闲资源   @之前,空闲资源在每个文件的第一行生效   测试。
  2.   
  3. 如果您在测试中注册了一个空闲资源,则该空闲资源将在下一个基于Espresso的操作期间生效。这个   即使下一个动作与相同测试中的行为仍然会发生   注册空闲资源的语句。
  4.