JUnit ErrorCollector @Rule 示例

在正常情况下,每当您在测试执行期间发现任何错误时,您都会停止测试,修复错误并重新运行测试。
但是, JUnit 采用了一种略有不同的方法。通过 JUnit 即使发现问题或测试失败,借助错误收集器,您仍然可以继续执行测试。错误收集器会收集所有错误对象,并在测试执行结束后仅报告一次。
为什么要使用错误收集器?
编写测试脚本时,即使由于网络故障、断言失败或其他任何原因导致任何一行代码执行失败,您也希望执行所有测试。在这种情况下,您仍然可以使用提供的特殊功能继续执行测试脚本。 JUnit 被称为“错误收集器”。
为了这, JUnit 使用 @Rule 注解该方法用于创建错误收集器对象。创建错误收集器对象后,您可以使用该方法轻松地将所有错误添加到该对象中。 addError(可抛出的错误)。 如你所知, 可投掷 是超类 特殊课程 和 误差 课程 Java以这种方式添加错误时,这些错误将被记录在日志中。 JUnit 测试结果。
将所有错误添加到错误收集器的好处在于,您可以一次性验证所有错误。此外,即使脚本在执行过程中失败,它仍会继续执行到测试方法的结束。
注意:如果使用简单的断言或 try/catch 块,则无法使用错误收集器方法。
样例代码
要了解更多关于错误收集器的信息,请参阅下面的代码示例,该示例演示了如何创建一个错误收集器对象并将所有错误添加到该对象中。 trac这个问题:
package guru99.junit; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); collector.checkThat(getResults(), not(containsString("here is an error"))); // all lines of code will execute and at the end a combined failure will be logged in. } }
注意: 这是一个示例性的例子tract,这不是一个可编译的文件。它的尾部注释换行到第二行,没有以 // 开头,并且 getResults() 函数和 Hamcrest 匹配器没有显示。完整的可运行版本如下。 使用 ErrorCollector 的示例.
@Rule 是什么? JUnit?
JUnit 提供了一种特殊的测试处理方式, 测试用例 或使用以下方式测试套件 @Rule 注解使用 @Rule,您可以轻松地添加或重新定义测试的行为。
系统内置了若干规则。 JUnit 测试人员可以使用 API,您也可以编写自己的规则。规则字段必须是公共的、非静态的,并且类型必须实现了 TestRule 接口。
请看下面的代码行,它展示了如何将 @Rule 注解与错误收集器一起使用:
@Rule public ErrorCollector collector= new ErrorCollector();
JUnit 5 年备注: Jupiter 用扩展 API 取代了规则,因此 org.junit.jupiter 中不再存在 @Rule 和 ErrorCollector。最接近的等效项是 Assertions.assertAll() 和 AssertJ SoftAssertions。 JUnit 这里显示的4个代码仍然在老式发动机中运行。参见 JUnit 注释 完整地图教程ping.
使用 ErrorCollector 的示例
为了理解错误收集器,我们来创建一个类和一个规则来收集所有错误。您将使用 `addError(throwable)` 方法添加所有错误。
请参见以下代码,它创建了一条规则,该规则实际上就是一个“错误收集器对象”。它用于将所有错误添加到列表中,以便在最后报告问题:
错误收集器示例.java
package guru99.junit; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); System.out.println("Hello"); try { Assert.assertTrue("A " == "B"); } catch (Throwable t) { collector.addError(t); } System.out.println("World!!!!"); } }
测试运行器.java
让我们将上述测试类添加到测试运行器中并执行它,以收集所有错误。请参见以下代码:
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(ErrorCollectorExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
输出:
看看失败之处 trac例如,哪个 trac将所有错误集中在一处。 JUnit 查看计数显示运行一次,但报告两个错误和一个失败,每个错误和失败都有自己的行号:
的好处 JUnit 错误收集器
你可以使用 JUnit 断言 例如,用于功能或 GUI 验证:
- assertEquals(String message, Object expected, Object actual),用于比较两个对象是否相等。
- 类似地,assertTrue(Boolean condition) 断言某个条件为真。
使用断言,验证测试变得很容易。但一个主要问题是,即使只有一个断言失败,测试执行也会停止。
测试连续性和恢复处理对于测试自动化的成功至关重要,而且在长期测试中尤为重要。 Selenium 在某些流程中,每次检查失败后都重启浏览器会消耗大量资源。错误收集器是处理此类情况的最佳方案。

