我有一堆参数化的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上没有公共静态参数方法”。

有没有一种方法可以从测试套件而不是测试用例中指定参数?
如果可能的话,我想避免为每个测试,每个测试套件创建一个新类。

最佳答案

我有一个类似的问题。通过创建包含@Parameters@RunWith(Parameterized.class)的抽象类来解决此问题。该类已通过测试套件中的所有测试进行了扩展。我发现的一件事是,无论这些注释是在测试套件中还是在测试中,都将在@Parameters@BeforeClass之前调用@Before。希望这会有所帮助。

10-06 09:15
查看更多