Espresso 2.2 を使用してインストルメンテーション テストを作成しています。
テストしたいフロー:
- テストでクリックされたradioButton
- 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 に渡し、ビューを変数にリンクしています。isIdleNow() が値 true を返すまで、IdleResource はテストを通過させないことを理解しています。したがって、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;
これは永遠にチェックされています(ただし、画面に自分のビューが表示されます)常にfalseを返します。
私は何を間違っていますか?