我很恼火地在Parameterized 文档中发现“在运行参数化测试类时,会为测试方法和测试数据元素的交叉产品创建实例。” 这意味着构造函数为每个测试运行一次,而不是在运行所有测试之前。我在构造函数中进行了一项昂贵的操作(1-5 秒),现在该操作重复了太多次,不必要地减慢了整个测试套件的速度。该操作只需一次即可设置所有测试的状态。如何使用参数化测试的一个实例运行多个测试?
问问题
3327 次
1 回答
8
我会将昂贵的操作转移到一个@BeforeClass
方法中,该方法在整个参数化测试中应该只执行一次。
一个愚蠢的例子如下所示:
@RunWith(Parameterized.class)
public class QuickTest {
private static Object expensiveObject;
private final int value;
@BeforeClass
public static void before() {
System.out.println("Before class!");
expensiveObject = new String("Just joking!");
}
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] { { 1 }, { 2 } });
}
public QuickTest(int value) {
this.value = value;
}
@Test
public void test() {
System.out.println(String.format("Ran test #%d.", value));
System.out.println(expensiveObject);
}
}
将打印:
Before class!
Ran test #1.
Just joking!
Ran test #2.
Just joking!
于 2013-01-21T15:46:35.133 回答