JUnit参数化 - 为每个参数创建一个实例

Nat*_*enn 9 java junit unit-testing parameterized junit4

我很恼火地在参数化文档中找到"当运行参数化测试类时,为测试方法和测试数据元素的交叉产品创建实例." 这意味着构造函数对于每个单独的测试运行一次,而不是在运行所有测试之前运行.我有一个昂贵的操作(1-5秒),我把它放在构造函数中,现在操作重复了太多次,不必要地减慢了整个测试套件.只需一次操作即可设置所有测试的状态.如何使用参数化测试的一个实例运行多个测试?

Dun*_*nes 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

将打印:

Before class!
Ran test #1.
Just joking!
Ran test #2.
Just joking!
Run Code Online (Sandbox Code Playgroud)