2016-10-17 6 views
1

私はテスト私はダイアログが表示されているかどうかを最初の行とをチェックエスプレッソの場合やないエスプレッソの非同期操作の問題を避けるには?

onView(withText(R.string.dialog_title)).check(matches(isDisplayed())); 

を持っており、それらは、私は、ダイアログ閉じるには、ボタンをクリックして実行します。

onView(withText(R.string.negative_button)).perform(click()); 

チェック操作の前に常にクリック操作が実行されるのは、両方の操作が非同期に実行されるためです。どのようにこの問題を回避し、非同期に操作を実行する必要がないときに、テストケースに記述されているように実行された行の順序を保持しますか?

+0

onView操作が非同期に実行されるケースは見たことがありません。あなたの前提を確認してください。別のアクションを実行するか、完全なコードを入力してください。 – satyajit

+0

@satyajit checkとimplementationのメソッドの実装を見ると、それらのメソッドが非同期で実行されるようにキューに入れられていることがわかります。 – karate

+0

https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html "デフォルトでは、Espressoは現在のメッセージキューのUIイベントが処理されるのを待っています次のテスト操作に移る前に完了するためのAsyncTasks "。したがって、テスト操作は非同期には実行されません。私のアドバイス:いくつかのブレークポイントでデバッグモードでテストを実行し、テストで何が起きているかを確認してください。 – jeprubio

答えて

1

IdlingResourceクラスをカスタマイズしようとすると、Viewコンポーネントが完全にロードされてからチェックを続行するか、操作を実行するまで一定の条件を待つことがあります。 isIdleNowメソッドをオーバーライドします。これは、ビューがすでにロードされているとき(または満たす必要がある他の条件)にのみtrueを返す必要があります。