检查许多 XML 字符串时,我经常使用 ErrorCollector 构造。但我仍然不明白它是如何工作的。
当我声明 ErrorCollector 时,我必须立即分配它:
@Rule
public ErrorCollector collector= new ErrorCollector();
如果我想在每次测试之前刷新收集器,我将分配一个任务
collector= new ErrorCollector();
在@Before方法中。但因此声明中的第一个赋值是多余的。但我无法删除它。
这个必须完成的任务有什么意义呢?它是如何运作的?我想,@Rule 仅与声明有关?
@马修法威尔在Groovy 类中 @Rule(JUnit) 声明和赋值的逻辑是什么 https://stackoverflow.com/questions/15943145/what-is-the-logic-of-rulejunit-declaration-and-assignment-in-a-groovy-class/15950781?noredirect=1#15950781说“在 Java 中,JUnit 运行程序检查 @Rule 注释是否应用于返回 TestRule 或 MethodRule 的公共非静态字段或公共非静态方法。”但这里检查的不是声明,而是赋值,这是在构建和测试构建之后发生的事情?
与大多数/全部一样@Rule
JUnit 中的 s 是refreshed
or cleared
每次测试前自动进行。所以你只需将其声明为@Rule
正如你上面所列的。您不需要在您的@Before
方法。我们认为 JUnit 将调用ErrorCollector
每次测试之前和之后。每次测试前ErrorCollector
可以初始化自身(清除任何先前存储的错误)。每次测试后,如果收集到错误,则会报告错误。
这是来源错误收集器 http://javasourcecode.org/html/open-source/junit/junit-4.10/org/junit/rules/ErrorCollector.java.html
来自评论:
必须分配它,因为 JUnit 必须有一个要使用的规则实例。否则该对象将为空。请记住,JUnit 代码使用反射来获取带有 @Rule 注释的对象实例,并使用 instanceof 来确定它是 TestRule 还是 MethodRule。我相信 @Before 方法是在语句内调用的,因此是在调用规则之后调用的
来自马修·法威尔:
当您运行 JUnit 测试(例如 FooTest)时,运行器将为每个测试方法创建一个 FooTest 实例。因此,如果您使用 public ErrorCollector Collector= new ErrorCollector();如上所述,那么每个测试方法都会自然地重新实例化一次。
结论:确保在测试之间不保存状态!当然,无论如何您都不应该这样做,因为无法保证顺序。
谢谢马特!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)