web-dev-qa-db-ja.com

Android:Espressoはフラグメントまたはアクティビティが表示されるまで待機しないため、すべてのテストが失敗しました

私はこれに関してたくさんの質問があることを知っています、しかし私は私を助けるために何も見つけることができません:(

Espressoを使用してUIを生成しようとしました-Androidアプリのテスト。依存関係の問題を克服した後(一部のライブラリは他のライブラリからの依存関係として異なるバージョンに2回含まれているため)まだありません動作テストを作成できます...

IdlingResourceについては知っていますが、読んでいると、espressoは、テストを実行する前に、メインスレッドとAsyncTaskPoolがアイドル状態になるまでそのまま待機します。

それと連絡を取るために、私は2つのアクティビティ、スプラッシュスクリーンとメインアクティビティを含むシンプルなアプリを作成しました。スプラッシュ画面には、mainActivityを開始する前に3秒間待機するためのこのようなものが含まれています

 new Handler().postDelayed(new Runnable() {
   @Override
   public void run() {
     finish();
     Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
     startActivity(intent);
   }
 }, 3000);

また、これにAsyncTaskを使用しようとしましたが、すべてのテストが失敗するため、何も正しく機能していないようです。

このテストでは、定義されたテキストを含むTextViewが次の方法でビューに表示されているかどうかのみを確認します。

onView(withText("DummyText")).check(matches(notNullValue()));

簡単なテストを作成するのはそれほど難しいことではないと思いました...

Api> = 16に対してテストする必要があるため、エスプレッソが必要です。私だけのために、uiAutomatorを使用してチェックしました(api> = 18用であることはわかっています)が、何かが表示されるのを待つスマートロジックがあります.....そしてそれは完全に機能します...

10
Thomas Cirksena

あなたのactivityRuleは何ですか? SplashScreenActivityの場合、テストはすぐに開始され、ビューがスプラッシュ画面にない場合はonViewが失敗するためです。そのビューをテストするために、MainActivityを直接開いてみてください。私はしばらくの間Espressoを使用していますが、ActivityTestRuleとして定義されたアクティビティの読み込みが完了すると@Testメソッドが開始されることを知っています。

これがお役に立てば幸いです。

幸運を!

7
sunlover3