我有一个看起来像这样的测试用例:
public class MyTest {
private static TestObject obj;
@BeforeClass
public static void setUpBeforeClass() {
obj = new TestObject();
}
@Test
public void testOne() {
assertTrue(obj.hasFoo());
}
@Test
public void testTwo() {
assertEquals(42, obj.getBar());
}
// More tests here...
}
我现在要做的是使用不同的TestObject实例运行整个测试用例。所以假设我有10个不同的TestObject实例。现在我想运行testOne()testTwo()等10次(我需要每个TestObject实例)。
如何使用JUnit4实现这一目标?还是我的设计不好?有没有更好的想法?
答案 0 :(得分:4)
@RunWith(Parameterized.class)
public class MyTest {
public MyTest(TestObject obj) {
this.obj = obj;
}
@Parameters
public static Collection<TestObject> params() { ... }
...
}
答案 1 :(得分:0)
如何使用数组测试所有内容?
public class MyTest {
private static TestObject[] objs;
@BeforeClass
public static void setUpBeforeClass() {
objs = new TestObj[]{new TestObject1(), new TestObject2()];
}
@Test
public void testOne() {
for(TestObject obj : objs){
assertTrue(obj.hasFoo());
}
}
@Test
public void testTwo() {
for(TestObject obj : objs) {
assertEquals(42, obj.getBar());
}
}
// More tests here...
}
答案 2 :(得分:0)
您可以通过继承实现与此接近的功能,这也可以让您区分测试输出中的测试用例。你必须要玩一点,因为静态和继承不能很好地协同工作。
一个选项是创建十个子类,每个子类都使用@Before
方法初始化超类中的实例obj
字段。如果您不希望每次重新初始化TestObject
的开销,您还可以使用@BeforeClass
方法初始化单个静态classObj
字段。然后,您的@Before
会将classObj
复制到obj
。无论哪种方式,您的超类都有测试方法和obj
实例方法,但没有初始化代码。