8

私は現在、Android でアプリを作成しており、Robotium を使用して機能テストを行っています (ちなみに、Android 1.6 未満では Robotium を使用しないでください。バグが多すぎます)。

これらのテストのいくつかはランダムに失敗する傾向があり、主に Robotium がテキスト フィールドを欠落したり、テキストを読み取らずにタイムアウトしたりします。私は@FlakyTestアノテーションを使用しようとしているので、失敗したテスト エラーをスローする前に 2 ~ 3 回実行されます。ただし、注釈は機能せず、テストは失敗後に再実行されません。

注釈の使用方法は次のとおりです。

public class ClassName extends ActivityInstrumentationTestCase2<HomeActivity>{

        @LargeTest
        @FlakyTest(tolerance=3)
        public void testMethod(){

        //Here I run my roboitium scripts.

        }
}

次に、コマンド ラインから実行します。

adb shell am instrument -w com.jayway.test/android.test.InstrumentationTestRunner

テストのEclipseもコマンドライン実行も、不安定なテスト注釈を考慮しません。申請しようとしている方法でエラーが表示される人はいます@FlakyTestか?

4

4 に答える 4

3

@FlakyTest注釈の使用に問題はありません。

@FlakyTest と Robotium (v2.2) をテストする簡単なテスト ケースをまとめました。

public class FlakyTestCase extends ActivityInstrumentationTestCase2<Main> {

private static int count = 0;
private Solo solo;

public FlakyTestCase() {
    super("com.stackoverflow.example", Main.class);
}

@Override
public void setUp() throws Exception {
    solo = new Solo(getInstrumentation(), getActivity());
}

@LargeTest
@FlakyTest(tolerance=3)
public void testFlaky(){
    Log.e("FlakeyTestCase", "Execution Count:" + ++count);

    solo.assertCurrentActivity(null,Main.class);
    solo.clickOnText("Doesn't Exist");

    Log.e("FlakeyTestCase", "Shouldn't make it here");
}
}

LogCat には次のメッセージが表示されました。

Execution Count: 1
Execution Count: 2
Execution Count: 3

したがって、@FlakyTestアノテーションは間違いなく呼び出されていました。テストの (最終的な) 不合格は次のように示されました。

junit.framework.AssertionFailedError: The text: Doesn't Exist is not found!

そして、メッセージ"Shouldn't make it here"はログに記録されませんでした。

私が見る限り、アノテーションの宣言方法@FlakyTestや Robotium v​​2.2 に関する問題はありません。

テスト コードの別の部分に問題があるのではないでしょうか?

于 2011-02-27T02:48:24.647 に答える
3

一般に、Android (Robotium の有無にかかわらず) のテストを作成する場合は、より注意する必要があります。「これは見えますか」とだけ言うことはできません。すべてを「待機」サイクルでラップする必要があるため、「これが表示されるのを待つ」と言います。これは、エミュレーターで実行する場合に特に問題になります。待機サイクルがなければ、一貫した実行はできません。数百のテストがあり、FlakyTest アノテーションを使用する必要はありませんでした。

于 2012-04-15T17:19:38.673 に答える
0

Robotium がテキスト フィールドを欠落している、またはタイムアウトしている、テキストを読み取れないことを意味する テキストまたは何かが画面上に存在するかどうかを明確に確認する必要がある場合は、

if(solo.searchText("Doesn't Exist", true){
solo.clickOnText("Doesn't Exist");
}

ボタンなどのコンポーネントの場合と同様に、上記のロジックでこれを実現できます。

于 2014-05-05T09:52:29.017 に答える
-3

これをコードに追加します。

import android.util.Log;
于 2012-04-15T12:56:16.690 に答える