3

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

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

由于 JUnit 的理念是在每个 @Test 上调用测试用例构造函数,我假设它会对参数化测试执行相同的操作 - 但我看到它只是调用该构造函数(为参数化测试定义的构造函数)每行一次,而不是每行每次测试一次。

因此,测试字段在全局范围内运行,并且测试相互影响。我想知道是否有一种方法可以强制运行器为每个测试调用构造函数,就像常规的 JUnit 运行器一样。谷歌和 JUnit 页面在这个案例上没有帮助我。我真的不想重写整个测试,在这一点上它是广泛且相当可读的。

4

1 回答 1

1

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

  1. 您使用 @Parameters 方法注释的方法只被调用一次。
  2. 为注释方法返回的集合中的每一行创建一个测试运行程序实例。
  3. 使用其构造函数为参数集合中的每一行实例化测试,但它在从初始调用缓存的相应参数值行中传递。

您可以通过单击此处此处查看发生这种情况的位置。如果您在调用之间改变状态(使用静态方法或其他方法)期望看到奇怪的事情。

编辑:在代码中四处寻找之后,我更好地理解了你现在在问什么。我刚刚使用 JUnit 4.10 调试了一个参数化测试,它确实在每次测试中每行调用一次构造函数。

于 2012-09-13T02:27:53.087 回答