6

を失敗した私が使用しようとした私は多くの質問がこの周りがいることを知っているが、私は私を助けるために何かを見つけることができません:(アンドロイド:エスプレッソは、フラグメントまたは活性はそう表示されるまで、すべてのテストが

待ちませんエスプレッソはアンドロイドアプリのためのUIテストを生成するために依存関係の問題を克服した後(他のライブラリとは異なるバージョンのライブラリが2回含まれているため)、まだ動作テストを作成することができません...

I IdlingResourceについて知っていますが、私が読んだところでは、エスプレッソはメインスレッドとAsyncTaskPoolがアイドルになるまで待ってからテストを実行します。

私は2つの活動、スプラッシュスクリーンとmainactivityを含む単純なアプリを作成しました。 スプラッシュスクリーンがmainActivity

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

を開始する前に、3秒間待つ、このようなものが含まれている私も、このためにAsyncTaskを使用しようとしましたが、何も、すべてのテストが失敗したため、正常に動作していないようにみえます。

テストのみチェック定義されたテキストを含むのTextViewをして、ビューに表示されている場合:私はそれは難しいが、簡単なテストを作成することではないだろうと思った

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

...

私はapi> = 16に対してテストしなければならないので、エスプレッソが必要です。ちょうど私のために私はuiAutomatorを使ってチェックしました(私はそれがapi> = 18のためだと知っています)が、何かが表示されるのを待つスマートなロジックがあり、それは完璧に動作します.....

答えて

5

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

これが役に立った。

幸運を祈る!

+2

あなたのアドバイスをいただきありがとうございます! 私が '偽' として、ルールの三番目のパラメータを宣言した後、私はそれが働いてしまった: '@Rule公共ActivityTestRule mMainActivity =新しいActivityTestRule <>(真SplascreenActivity.class、偽);' これを行うと、私は例えば。 'doNothing()(mDeviceService).getDevices();' 、次いで 'mSplashscreenActivity.launchActivity(null)を使用して活性を手動で起動し、'。 また、_AsyncTask_で_Handler_を変更し、期待通りに待機、チェックなどのテスト作業を知っています..... – grumpyshoe

+1

本当に素晴らしいです!よくやった! – sunlover3

+0

@ grumpyshoe私も同じ問題に直面しています。私のアプリケーションでは、自動的にユーザーをログイン画面に誘導するスプラッシュ画面がありますが、ログインに移動してユーザー名入力編集テキストの検索を開始するまで待つことはありません。手伝ってくれませんか。 – Krishnakant

関連する問題