我有一堆参数化的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
。希望这会有所帮助。