1

次のようなパラメータ化されたJUnit4テストがたくさんあります。

@RunWith(Parameterized.class)
public class MyTestX {
  private final MyParameter param;
  public TestX(MyParameter param) { 
    this.param = param; 
  }

  @Test
  public void myTest() {
    // Some test code
  }
}

MyParameter の値がそれぞれ異なる、異なるテスト スイートからそれらを実行したいと考えています。

私は次のことを試しました:

@RunWith(Suite.class)
@SuiteClasses( { MyTest1.class, MyTest2.class, ... })
public class MyTestSuite1 {

  @Parameters
  public static Collection<Object[]> data() {
    Object[][] data = {{ new MyParameter(1) )}};
    return Arrays.asList(data);
  }
} 

しかし、それは機能しません。「クラス MyTestX に public static parameters メソッドがありません」というメッセージが表示されます。

テストケースの代わりにテストスイートからパラメータを指定する方法はありますか? 可能であれば、テストごと、テスト スイートごとに新しいクラスを作成することは避けたいと思います。

4

4 に答える 4

1

同様の問題がありました。@Parametersとを含む抽象クラスを作成することで修正されました@RunWith(Parameterized.class)。このクラスは、テスト スイートのすべてのテストによって拡張されました。私が見つけたものの 1 つは、これらの注釈がテスト スイート内にあるかテスト内にあるかにかかわらず、およびの@Parameters前に呼び出されることです。うまくいけば、これが役立ちます。@BeforeClass@Before

于 2012-07-25T03:39:03.357 に答える
0

同じパラメータで異なるテストを実行したいようです。

パラメータ化されたテストは、異なるパラメータを使用して同じテストを実行するためのものです。テストが完全に同じでない場合は、別のテストが必要です。

あなたがする必要があるのは、クラスにさまざま@Testなメソッドを追加しMyTestX、パラメーター化されたテストを忘れることです。そうすれば、クラスは1つだけになり、テストは明確な方法で編成されます。

于 2012-05-05T16:03:07.480 に答える
0

MyParameter の値がそれぞれ異なる、異なるテスト スイートからそれらを実行したいと考えています。

要件は の通常の動作とは異なりParameterizedます。テストの階層を定義し、Object[][]それらに同じパラメーター セット ( ) を割り当てる場合、JUnit フレームワークは最初のテスト ケースのすべてのパラメーターを使用してテストを実行します。次のテスト ケースを作成し、すべてのパラメーターで実行します。

したがって、次のパラメーターに進む前に最初に単一のパラメーターのすべてのテストを実行する場合は、別の runner が必要です。ランナーを提供するこのライブラリを見てください。ParameterizedSuite

パラメータ化されたテスト スイートは次のようになります。

@RunWith(ParameterizedSuite.class)
@SuiteClasses({OneTest.class, TwoTest.class})
public class MyParameterizedTestSuite {
    @Parameters(name = "Parameters are {0} and {1}")
    public static Object[] params() {
        return new Object[][] {{'A',1}, {'B',2}, {'C',3}};
    }
于 2016-07-04T22:31:24.460 に答える