12

複数のUIテストがあります。1つのテストを実行すると、すべて問題ありません。しかし、それらのバッチを(CIビルドの一部として)実行すると、テストは失敗します。これは、最初に実行されるテストがアプリケーションの状態を変更し、次のテストがそれらの変更の影響を受けるためです。(アプリが強制終了されていないため)。

で試してみgetActivity().finish()ましたtearDown()。実際に同じことをして
みました。solo.finalize()

各テスト実行の開始時に新しいアプリを作成する方法はありますか?(Robotiumを使用)。
そして、テストの最後にプログラムでアプリを強制終了する方法はありますか?Robotiumで
使用していますActivityInstrumentationTestCase2

4

7 に答える 7

5

または単に追加しますsolo.finishOpenedActivities();

于 2012-06-19T01:42:10.683 に答える
2

テストスイートの性質は正確にはわかりませんが、複数の「フレッシュスタート」テストを実行して2番目のテストを実行する際に問題が発生しました。スポーンされたアクティビティに関連する私の問題は、FLAG_ACTIVITY_CLEAR_TOPを使用してアクティビティを起動することで解決されました。もちろん、これによりスタックがクリアされますが、それが必要だと思いますか?

    Intent i = new Intent();
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    setActivityIntent(i);
    solo = new Solo(getInstrumentation(), getActivity());
于 2012-07-26T01:34:25.363 に答える
1

テストしている特定のアプリに応じて、アプリを「殺す」ためのアドホックな方法を追加してみませんか?たとえば、アプリケーションアクティビティの深さによっては、「3回押し戻す」などで十分な場合があります。

tearDownこれをテストスーパークラスのメソッドに追加して、各テストの後に実行することができます。

Robotiumテストは、通常の単体テストではなく(そうではありません!)、ユーザーケース、受け入れテストとして考える必要があります。したがって、アプリを閉じたい場合は、これらのテストで、ユーザーがアプリを閉じるために期待することを正確に実行してください。

于 2011-12-13T10:59:41.673 に答える
1

問題の原因は次のとおりです。

  1. スタック内のすべてのアクティビティのリストを取得するAndroidAPIはありません。
  2. (1)の回避策は、ActivityMonitorを使用して、開始する各アクティビティを追跡することです。
  3. Robotiumは回避策を使用しますが、ActivityInstrumentationTestCase2テストケースがアクティビティを開始した後にActivityMonitorを設定します。

    Activity activity = getActivity();
    Solo solo = new Solo(getInstrumentation(), activity);
    

テスト対象のアクティビティが転送アクティビティである場合、SoloがActivityMonitorを登録する前に、宛先アクティビティを開始している可能性があります。Solo.finishOPenedActivities()は、ActivityMonitorから収集したリストに依存しています。

@Guillaumeの回答に従って、テストケースまたはtearDown()からこのメソッドを呼び出します。

private void backOutToHome() {
    boolean more = true;
    while(more) {
        try {
            getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
        } catch (SecurityException e) { // Done, at Home.
            more = false;
        }
    }
}
于 2012-02-06T23:54:55.463 に答える
0

mavenまたはantを使用してビルドを実行する場合(RobotiumはJUnit-Testsの便利なラッパーです)、すべてのテストクラスまたはテストケースに対して新しいプロセスをフォークするオプションがあります。これにより、クリーンな環境が提供されますが、テストの実行が遅くなります。

私は個人的にバニラJunit/TestNGに固執し、モック(jMockitを使用)を利用してコードとAndroidの間の適切な相互作用を保証することを好みます。こちらのサンプルをご覧ください:

https://github.com/ko5tik/andject/blob/master/src/test/java/de/pribluda/android/andject/ViewInjectionTest.java

于 2011-12-12T09:10:00.713 に答える
0

super.tearDown();を削除してみてください。

于 2016-01-07T07:22:45.507 に答える
0

私の解決策:

    @Override
    public void tearDown() throws Exception {

        solo.finishOpenedActivities();

        super.tearDown();
    }
于 2017-11-16T20:18:01.787 に答える