java - 为什么 ErrorCollector 在声明的时候要求赋值?

标签 java junit errorcollector

检查很多 XML 字符串,我经常使用 ErrorCollector 构造。但我仍然不明白它是如何工作的。

当我声明一个 ErrorCollector 时,我必须立即分配它:

@Rule
public ErrorCollector collector= new ErrorCollector();

如果我想在每次测试前刷新收集器,我会进行分配

collector= new ErrorCollector();

在@Before 方法中。但是因此声明中的第一个分配是过多的。但我无法删除它。

这个 must-to-be-assignment 的意义是什么?它是如何工作的?我想,@Rule 只是关于声明?

@Matthew Farwell What is the logic of @Rule(JUnit) declaration and assignment in a Groovy class说“在 Java 中,JUnit 运行程序检查 @Rule 注释是否应用于返回 TestRule 或 MethodRule 的公共(public)非静态字段或公共(public)非静态方法。”但是这里检查的不是声明,而是赋值,它是在构建和测试构建之后发生的事情?

最佳答案

与 JUnit 中的大多数/所有 @Rule 一样,它们会在每次测试前自动刷新清除。因此,您只需将其声明为上面列出的 @Rule。你不需要在你的 @Before 方法中对它做任何事情。我们认为 JUnit 会在每次测试前后调用 ErrorCollector。在每次测试之前,ErrorCollector 可以自行初始化(清除任何先前存储的错误)。每次测试后,如果收集到错误,它就会报告错误。

这是 ErrorCollector 的来源

来自评论:

它必须被分配,因为 JUnit 必须有一个规则实例才能使用。否则该对象将为空。请记住,JUnit 代码使用反射来获取带有 @Rule 注释的 Object 实例,并使用 instanceof 来确定它是 TestRule 还是 MethodRule。我相信 @Before 方法是在语句中调用的,因此在调用规则之后

来自马修法威尔:

当您运行 JUnit 测试(例如 FooTest)时,运行程序将为每个测试方法创建一个 FooTest 实例。所以如果你使用 public ErrorCollector collector= new ErrorCollector();如上所述,然后每个测试方法自然重新实例化一次。

结论:确保您不在测试之间保存状态!当然,无论如何您都不应该这样做,因为不能保证顺序。

谢谢马特!

关于java - 为什么 ErrorCollector 在声明的时候要求赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15966146/

相关文章:

java - 在Java中绘制连接到矩形的箭头

java - 在使用 Cucumber 和 JUnit 时,如何截取屏幕截图并将其附加到 Allure 报告中?

java - 如何使用 JUnit 的 ErrorCollector 来检查发生了多少次失败?

java - 如何在不调用规则的情况下测试 drool 文件中存在的函数?

hibernate - 如何让 JPA 与 Hibernate 提供程序自动扫描实体类

java - 如何将错误收集器用于带参数的 junit 测试方法

java - 在给定的代码中,编译器将插入 super();动物构造函数中的声明?

Java 8 javadoc doclint 功能 'tag not allowed here'

java - Scala 等价于 Java 构建器模式是什么?