2

テスト中の異常な状況があります。Espresso を使用してテストを作成しています。私は Espresso と InstrumentationTestCase がこれを行うことを意図していないことを知っています。

クラスの 1 つで、特定の値の変更を通知するリスナーを作成しました。テスト スイートでリスナーを使用します。

リスナーから値を取得したら、値が変更されたことをアサートする必要があります。

私の問題は、リスナーから値を受け取る前にテストが終了することです。

    private void sendSpeedChanges() {
    setStaticSpeed(new Random().nextInt(10) + 2);
    try {
        runTestOnUiThread(new Runnable() {
            @Override
            public void run() {
                consoleActivity.onSpeedChanged(getStaticSpeed(), false);
            }
        });
    } catch (Throwable throwable) {
        throwable.printStackTrace();
    }

}

private void createSpeedDelegate() {
    EspressoMachineValues.setOnSpeedChangeListener(new EspressoMachineValues.OnSpeedChangeListener() {
        @Override
        public void onSpeedChanged(double speed) {
            //assert speed is correct.
            assertTrue(getStaticSpeed() == speed);
        }
    });

}

これらは私が使用している2つの方法です。は最初createSpeedDelegate()に呼び出されます。それから私は電話しますsendSpeedChanges。これをX回行う必要があります。


ノート:

  • 情報を取得するのに約 200 ミリ秒かかります (平均)。
  • sendSpeedChanges()値を確認するまで呼び出すことはできませんonSpeedChange()
  • Thread.sleep();リスナーがメインスレッド上にあるため使用できません。

を追加しようとgetInstrumentation().wait(2000);しましたが、getInstrumentation().waitForIdleSync();明らかにどちらも機能しません。

完璧な世界では、次のようにします。

   for (int i = 0; i < 42; i++) {
        sendSpeedChanges();
        i++;
    }

ただし、これは値がチェックされるのを待ちません。値を待つと、テスト ランナーはすべてのテストが完了したと見なして終了します。

私の質問は、テストがいつ終了するかを制御する方法はありますか? 私のテストは完了したように見えますが。

4

2 に答える 2