5

JUnit 3.x でパラメーター化されたテスト ケースを作成する場合、通常、次のような TestSuite を作成します。

public static Test suite() {
    TestSuite s = new TestSuite();

    for (int i = MIN; i < MAX; ++i) {
        s.addTest(new MyTest(i));
    }
}

このsuite()メソッドは、JUnit をデスクトップ コマンドラインから実行するときに正しく呼び出されます。Android テスト プロジェクトでこれを試したところ、テストが実行されません。エミュレーターでテストを実行するにはどうすればよいですか? または、Android 用のパラメーター化されたテストを作成する別の方法はありますか?

その他の考え:

通常、コマンド ラインでテストを実行します。

adb shell am instrument -w [-e class <fully qualified test class name>[#<test method name>()]] <Android package name>/android.test.InstrumentationTestRunner

これにより、テスト スイートから実行するテストを選択できます。理想的には、パラメータ化されたテストもこの方法で実行したいと考えています。@Appu からのコメント内のリンクは、JUnit テストを実行する別のアプリの構築について説明しています。その一環として、このアプリにはカスタム TestRunner があります。これらのアイデアを借りて、 の代わりに使用できる TestRunner を作成できる可能性が非常に高いですandroid.test.InstrumentationTestRunner。これは、珍しいことではないタスクの多くの作業のようです。Android API に同様のソリューションが既にある場合は、車輪の再発明はしたくありません。誰かそのようなことを知っていますか?また、他の代替ソリューションも役立ちます。

気にしないでください、@dtmilanoがすでにこれを回答として投稿しているようです...

4

3 に答える 3

2

または、Android 用のパラメーター化されたテストを作成する別の方法はありますか?

私たち (Square) は、この目的のためにBurstというライブラリを作成しました。テスト コンストラクターに enum パラメーターを追加すると、Burst のテスト ランナーは列挙値の組み合わせごとにテストを生成します。例えば:

public class ParameterizedTest extends TestCase {
  enum Drink { COKE, PEPSI, RC_COLA }

  private final Drink drink;

  // Nullary constructor required by Android test framework
  public ConstructorTest() {
    this(null);
  }

  public ConstructorTest(Drink drink) {
    this.drink = drink;
  }

  public void testSomething() {
    assertNotNull(drink);
  }
}
于 2014-10-21T18:32:49.283 に答える
2

テストランナーを実装して、パラメータを Android テストに渡すことができます。android junit テスト (パラメーター化されたテスト) に引数を渡す方法の例を参照してください。

于 2013-02-22T06:46:18.127 に答える
1

suite()最初にこの質問を書いてからしばらくして、静的メソッドを含むテスト クラスを直接実行できることを発見しました。

adb shell am instrument -w -e class <fully qualified test class name> <Android package name>/android.test.InstrumentationTestRunner

ただし、特定のパッケージ内のすべてのテストを実行しようとすると、テスト スイートが実行されません。

もちろん、これは久しぶりです。現在、コマンドラインの代わりに Android Studio を使用しています。テスト クラスを個別に実行することはできますが、パッケージを選択したり、すべてのテストを実行しようとしても実行されません。

考えられる代替手段はsuite()、返された にすべてのテストを追加するメソッドを使用してマスター テスト クラスを作成することTestCaseです。残念ながら、スイートに新しいテスト クラスを追加するたびに、手動で編集する必要があります。

于 2014-10-21T19:40:00.123 に答える