0

各テスト実行後、junit は次のテストに進みます。また、アクティビティは各テストの実行後に自動的に閉じます。

関数をテストするときは問題ありませんが、ビューをテストするときは問題ありません。junit が次のテストを実行する前に、実行結果を画面に表示したいと考えています。

だから、私はテストの間に小さな遅延を作りたい.


私がそれを行うことができる1つの方法があります:

public void testMyView() throws InterruptedException {
    getActivity().runOnUiThread(new Runnable() {

        @Override
        public void run() {
            // viewOperations...
        }
    });
    Thread.sleep(3000);
}

しかし、このコードは汚れているため、この方法は好きではありません (特に、このようなテストがたくさんある場合)。


別の方法ははるかに優れているようです:

@UiThreadTest
public void testHandleEmptyAlphabetList() throws InterruptedException {
// view operations
    Thread.sleep(3000);
}

BUT: UI スレッドはブロックされますが、テスト スレッドはブロックされません。テスト スレッドをブロックする必要があります。

Thread.sleep(3000);テストスレッドでこのコードから個別に実行する方法はありますか?


では、テスト間でスレッドを遅延させる最良の方法は何でしょうか?

ps追加のテストフレームワークをお勧めしないでください。埋め込みツールを使用して問題を解決したいのです。ありがとうございました。

4

2 に答える 2

-1

この面倒な単体テストの方法を捨てて、 Robolectricを使用することをお勧めします。そうすれば、テストは JVM で実行され、この厄介なセットアップをすべて処理する必要がなくなります。View テストの実行速度と、エミュレーターを実行する必要がないことに驚くことでしょう。

于 2012-12-26T05:02:59.157 に答える
-2

実際の Android の実行が必要なテストには、Robotiumを使用してみてください。

solo = new Solo(getInstrumentation(), getActivity());
[...]
if (failure) {
    solo.takeScreenshot();
} 

これにより、スクリーンショットが SD カードに保存されます (WRITE_EXTERNAL_STORAGE 権限が必要です)

または、別のテスト フレームワークを使用したくない場合 (確認することをお勧めしますが)、スクリーンショットを撮るためにそこで使用されているコードを盗むだけです。

于 2013-01-04T09:57:24.023 に答える