2012-09-12 47 views
3

我写了一个很长的参数化测试,一方为参数的构造函数调用带有双括号语法来构建不同的对象为二维数组的每一行:在参数亚军JUnit测试用例的构造函数调用

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

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

因此,测试领域的行为是全球性的,测试正在相互影响。我想知道是否有办法强制跑步者为每个测试调用构造函数,就像常规的JUnit跑步者一样。谷歌和JUnit网页在这种情况下没有帮助我。我真的不想重写整个测试,这个测试是广泛而且相当可读的。

回答

1

我不知道如果我完全跟着你,但在测试运行时,这是发生了什么:

  1. 你使用@参数加以注释的方法的方法被称为一次且仅一次。
  2. 将为注释方法返回的集合中的每一行创建一个测试运行器实例。
  3. 测试使用其构造函数为参数集合中的每一行实例化,但它传递到从初始调用缓存的相应参数值行中。

通过点击herehere可以看到发生了什么情况。如果你在调用之间改变状态(使用静态方法或其他),期望看到奇怪的事情。

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

+0

你是说4.10中的行为已经改变,还是仍然存在缓存行? – orbfish

+0

嗯,这并没有真正回答这个问题,但是感谢你的时间,它帮助我想出了一个解决方法。 – orbfish

相关问题