参数化运行程序中的Junit测试用例构造函数调用



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

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

由于JUnit的理念是在每个@test上调用测试用例构造函数,我假设它对参数化测试也会这样做——但我看到它只在每行调用该构造函数(为参数化测试定义的构造函数)一次,而不是每行每测试一次。

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

我不确定我是否完全遵循您的建议,但当测试运行时,会发生以下情况:

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

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

编辑:在仔细研究了代码之后,我更明白你现在在问什么了。我刚刚使用JUnit 4.10调试了一个参数化测试,它确实在每个测试中每行调用一次构造函数。

相关内容

  • 没有找到相关文章

最新更新