我正在使用 Espresso 2.2 编写仪器测试。
我要测试的流程:
- 测试单击的单选按钮
- onClick 向 API 发起请求
- 每次不同时间后我收到回复
- 肯定响应触发活动中调用的接口方法
- onRequestSuccess 我正在屏幕上显示名为 vSetupAmount 的附加面板
我想在单击 radioButton 后注册 IdleResource,以便它等到 vSetupAmount 变得可见。但我不能让它工作。请告诉我我做错了什么。
我写过这样的 IdleResource:
public class AmountViewIdlingResource implements IdlingResource {
private CountriesAndRatesActivity activity;
private ResourceCallback callback;
private SetupAmountView amountView;
public AmountViewIdlingResource(CountriesAndRatesActivity activity) {
this.activity = activity;
amountView = (SetupAmountView) this.activity.findViewById(R.id.vSetupAmount);
}
@Override public String getName() {
return "Amount View idling resource";
}
@Override public boolean isIdleNow() {
callback.onTransitionToIdle();
return amountView.getVisibility() == View.VISIBLE;
}
@Override public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
this.callback = resourceCallback;
}
}
所以我将活动传递给 IdleResource,用变量链接视图。我知道 IdleResource 不会让测试通过,直到 isIdleNow() 返回值 true。所以如果 view 是 View.GONE 那么它不会走得更远。
它在测试中的样子:
// click of radioButton picked from radioGroup
onView(withId(rgDeliveries.getChildAt(id).getId())).perform(scrollTo(), click());
// wait for view to become visible
Espresso.registerIdlingResources(new AmountViewIdlingResource(getActivity()));
// go to button on view
onView(withId(R.id.btnGetStarted)).perform(scrollTo());
// unregister idle resource
for ( IdlingResource resource : getIdlingResources()) {
Espresso.unregisterIdlingResources(resource);
}
所以我点击了radioButton。IdleResource 已成功注册,但没有任何反应。在我的设备上,API 响应来了。vSetupAmount 正在显示,但
amountView.getVisibility() == View.VISIBLE;
永远被检查(但我在屏幕上看到我的视图)总是返回错误。
我究竟做错了什么?