2

2つのテスト方法があり、異なる構成で実行する必要があります

myTest() {
    .....
    .....
}

@Test
myTest_c1() {
    setConf1();
    myTest();
}

@Test
myTest_c2() {
    setConf2();
    myTest();
}

//------------------

nextTest() {
    .....
    .....
}

@Test
nextTest_c1() {
    setConf1();
    nextTest();
}

@Test
nextTest_c2() {
    setConf2();
    nextTest();
}

toscaの実行には別々のメソッドが必要なため、1つの構成から両方を実行することはできません(以下のコードのように)。

@Test
tests_c1() {
    setConf1();
    myTest()
    nextTest();
}

各テストを実行するためにこれらの2つのメソッドを記述したくないのですが、どうすればこれを解決できますか?

最初にカスタムアノテーションを書こうと思いました

@Test
@RunWithBothConf
myTest() {
   ....
}

しかし、おそらくこれに対する他の解決策はありますか?

4

4 に答える 4

3

を使用するのはTheoriesどうですか?

@RunWith(Theories.class)
public class MyTest{

   private static enum Configs{
     C1, C2, C3;
   }

  @DataPoints
  public static Configs[] configValues = Configs.values();

  private void doConfig(Configs config){
    swich(config){...}
  }

  @Theory
  public void test1(Config config){
      doConfig(config);

      // rest of test
  }

  @Theory
  public void test2(Config config){
     doConfig(config);

      // rest of test
  }

オフの場合、フォーマットする理由がわかりません。

于 2012-10-25T17:35:45.700 に答える
1

これが私がそれにアプローチする方法です:

  • 2 つのテスト クラスを作成する
  • 最初のクラスは conf1 に設定しますが、@Before 属性を使用してセットアップをトリガーします
  • 2 番目のクラスは最初のクラスを拡張しますが、configure メソッドをオーバーライドします

以下の例では、単一のメンバー変数がありますconf。構成が実行されない場合、デフォルト値の 0 のままになります。setConf1 は、この変数を 1 に設定setConfするクラスに含まれるようになりました。setConf2 は、このクラスに含まれるようになりました。Conf1TestsetConfConf2Test

主なテストクラスは次のとおりです。

public class Conf1Test
{
   protected int conf = 0;

   @Before
   public void setConf()
   {
      conf = 1;
   }
   @Test
   public void myTest()
   {
      System.out.println("starting myTest; conf=" + conf);
   }

   @Test
   public void nextTest()
   {
      System.out.println("starting nextTest; conf=" + conf);
   }
}

そして、2回目のテストクラス

public class Conf2Test extends Conf1Test
{
   // override setConf to do "setConf2" function
   public void setConf()
   {
      conf = 2;
   }
}

パッケージ内のすべてのテストを実行するように IDE を構成すると、次の出力が得られます。

starting myTest; conf=1
starting nextTest; conf=1
starting myTest; conf=2
starting nextTest; conf=2

これはあなたに何を与えると思います。各テストは 1 回だけ記述する必要があります。各テストは 2 回実行さconf1れます。conf2

于 2012-10-25T17:22:21.277 に答える
1

特定のテストを異なる構成で実行する必要がある、私が持っている一連のテストケースで同様の問題があります。さて、あなたの場合の「構成」は設定に似ているかもしれません。その場合、これは最良のオプションではないかもしれませんが、私にとっては展開モデルに似ているので、適合します。

  1. テストを含む基本クラスを作成します。
  2. 異なる構成を表す基本クラスを拡張します。
  3. 各派生クラスを実行すると、基本クラスのテストが独自のクラスの構成設定で実行されます。
  4. 新しいテストを追加するには、それらを基本クラスに追加するだけです。
于 2012-10-25T17:27:01.487 に答える
0

あなたが今それを持っている方法は私には問題ないようです。コードを複製することはなく、各テストは明確で理解しやすいものです。

于 2012-10-25T17:06:20.590 に答える