Junit Test Case构造函数调用参数化的运行程序

时间:2012-09-12 22:50:47

标签: java junit parameterized-unit-test junit-runner

我写了一个长参数化测试,其中一个参数是一个带有双括号语法的构造函数调用,为2D数组的每一行构造一个不同的对象:

Object[][] data = new Object[][] {
{ 1, 2, 3, new Blah() {{ setA(); }} }
{ 1, 2, 3, new Blah() {{ setB(); }} }
...

由于JUnit的原理是在每个@Test上调用测试用例构造函数,我假设它会对参数化测试做同样的事情 - 但我发现它只调用那个构造函数(为其定义的构造函数)参数化测试)每行一次,而不是每行测试一次。

因此,测试字段表现为全局,测试相互影响。我想知道是否有一种方法可以强制运行器为每个测试调用构造函数,就像使用常规JUnit运行器一样。在这种情况下,Google和JUnit页面并没有帮助我。我真的不想重写整个测试,这个广泛且相当可读。

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全跟随你但是当测试运行时,会发生这种情况:

  1. 使用@Parameters方法注释的方法只调用一次。
  2. 为带注释的方法返回的集合中的每一行创建一个测试运行器实例。
  3. 使用构造函数为参数集合中的每一行实例化测试 ,但它会在从初始调用缓存的相应参数值行中传递。
  4. 点击herehere即可了解这种情况。如果你在调用之间改变状态(使用静态方法或其他什么),那么期望看到奇怪的东西。

    编辑:在代码中探讨之后,我会更清楚地了解您现在所要求的内容。我刚刚使用JUnit 4.10调试了一个参数化测试,它确实每次测试每行调用一次构造函数。