テスト中の異常な状況があります。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++;
}
ただし、これは値がチェックされるのを待ちません。値を待つと、テスト ランナーはすべてのテストが完了したと見なして終了します。
私の質問は、テストがいつ終了するかを制御する方法はありますか? 私のテストは完了したように見えますが。