我编写了一个长参数化测试,其中一个参数是使用双括号语法的构造函数调用,为 2D 数组的每一行构造不同的对象:
Object[][] data = new Object[][] {
{ 1, 2, 3, new Blah() {{ setA(); }} }
{ 1, 2, 3, new Blah() {{ setB(); }} }
...
由于 JUnit 的理念是在每个 @Test 上调用测试用例构造函数,因此我假设它会对参数化测试执行相同的操作 - 但我发现它只是调用该构造函数(为参数化测试定义的构造函数)每行一次,而不是每行每次测试一次。
因此,测试领域正在全球范围内运行,并且测试正在相互影响。我想知道是否有办法强制运行程序为每个测试调用构造函数,就像常规 JUnit 运行程序一样。 Google 和 JUnit 页面在这种情况下没有帮助我。我真的不想重写整个测试,它在这一点上是广泛且相当可读的。
我不确定我是否完全明白你的意思,但是当测试运行时,会发生以下情况:
- 您用 @Parameters 方法注释的方法将被调用一次且仅一次。
- 为带注释的方法返回的集合中的每一行创建一个测试运行器实例。
- 考试is使用其构造函数为参数集合中的每一行进行实例化,但它是在从初始调用中缓存的相应参数值行中传递的。
您可以通过单击查看发生这种情况的位置here https://github.com/KentBeck/junit/blob/master/src/main/java/org/junit/runners/Parameterized.java#L314 and here https://github.com/KentBeck/junit/blob/master/src/main/java/org/junit/runners/Parameterized.java#L192。如果您在调用之间改变状态(使用静态方法或其他方法),预计会看到奇怪的事情。
编辑:在浏览代码后,我更好地理解了您现在要问的问题。我刚刚使用 JUnit 4.10 调试了一个参数化测试,它确实在每个测试每行调用一次构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)