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()));
答案 0 :(得分:1)
这里存在同样的问题,发现注册idlingResources不会导致Espresso等待,但是除了Espresso.onView
之外,您仍然可以使用Espresso.onIdle()
等待注册的idlingResources变为空闲状态。
最后,我找到了官方文件,引自here:
在需要之前注册空闲资源。
与闲置资源相关的同步优势仅在Espresso首次调用该资源的 isIdleNow()方法。
以下列表显示了此属性的几个示例:
- 如果您在带有注释的方法中注册空闲资源 @之前,空闲资源在每个文件的第一行生效 测试。
- 如果您在测试中注册了一个空闲资源,则该空闲资源将在下一个基于Espresso的操作期间生效。这个 即使下一个动作与相同测试中的行为仍然会发生 注册空闲资源的语句。