use*_*388 7 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;
}
}
Run Code Online (Sandbox Code Playgroud)
我这样注册:
Espresso.registerIdlingResources(new WaitPingSuccessIdlingResource(activity));
Log.i("tonghu", "ChoiceServerActivityTest, testPingSuccess(L42): 2222");
Run Code Online (Sandbox Code Playgroud)
通常,第二个日志仅在isIdleNow()返回时打印true.
但现在我的日志是:
I/tonghu (23470): WaitPingSuccessIdlingResource, isIdleNow(L94): rst false
I/tonghu (23470): ChoiceServerActivityTest, testPingSuccess(L42): 2222
Run Code Online (Sandbox Code Playgroud)
为什么我的IdlingResource不空闲时可以打印第二个日志.
我的英文很差,有任何问题,请告诉我!谢谢!
编辑: 我已经解决了这个问题:
我看到课上有评论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.
Run Code Online (Sandbox Code Playgroud)
因此,在注册Idling资源之后,只需提供任何视图操作:
Espresso.registerIdlingResources(new WaitPingSuccessIdlingResource(activity));
Espresso.onView(ViewMatchers.withId(R.id.list_view)).check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
Run Code Online (Sandbox Code Playgroud)
同样的问题在这里,发现注册idlingResources不会导致Espresso等待,但除此之外Espresso.onView,您仍然可以使用Espresso.onIdle()等待注册的idlingResources变为空闲。
最后找到了官方文档,引用自这里:
在需要闲置资源之前注册它们。
与空闲资源相关的同步优势仅在 Espresso 首次调用该资源的 isIdleNow() 方法后才会生效。
以下列表显示了此属性的几个示例:
- 如果在@Before注解的方法中注册空闲资源,则该空闲资源在每次测试的第一行生效。
- 如果您在测试中注册空闲资源,则该空闲资源将在下一个基于 Espresso 的操作期间生效。即使下一个操作与注册空闲资源的语句处于同一测试中,此行为仍然会发生。