JUnit错误收集之@Rule示例

但是JUnit的方法略有不同。使用JUnit错误收集器,仍然可以继续测试执行错误收集器收集所有错误对象,并在测试执行结束后只报告一次。

在本教程中,将了解-

  • 什么是JUnit中的错误收集器?
  • jUnit中的@Rule是什么?
  • 使用错误收集器的示例
  • JUnit错误收集器的优点

为什么使用错误收集器?

在编写测试脚本时,即使任何一行代码由于网络故障、断言故障或任何其他原因而失败,也希望执行所有测试。在这种情况下,仍然可以使用JUnit提供的称为“错误收集器”的特殊功能继续执行测试脚本。

为此,JUnit使用@Rule注释,该注释用于创建错误收集器的对象。一旦创建了错误收集器的对象,当以这种方式添加错误时,这些错误将被记录在JUnit测试结果中。

在错误收集器中添加所有错误的好处是可以一次验证所有错误。此外,如果脚本在中间失败,它仍然可以继续执行它

注意:在使用简单的Assert或尝试/捕获挡路的情况下,不可能使用错误收集器方法。

示例代码

若要了解有关错误收集器的更多信息,参阅下面的代码示例,该示例演示如何创建错误收集器对象并在该对象中添加所有错误以跟踪问题:

package guru.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.
    }
}

jUnit中的@Rule是什么?

JUnit通过使用@Rule注释提供了特殊类型的测试、测试用例或测试套件处理。使用@Rule,可以轻松地添加或重新定义测试的行为。

JUnit API提供了几个内置规则供测试人员使用,甚至也可以编写我们自己的规则。

参见下面的代码行,它显示了如何将@Rule注释与错误收集器一起使用:

@Rule
public ErrorCollector collector= new ErrorCollector();

使用ErrorCollector的示例

为了理解错误收集器,让我们创建一个类和一个规则来收集所有错误。将在此处使用 addError(throwable) 添加所有错误。

参见下面的代码,该代码只是创建一个规则,而不是创建“错误收集器对象”。进一步用于添加所有错误,以便在末尾报告问题:

ErrorCollectorExample.java

package guru.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!!!!");
    }
}

TestRunner.java

让我们在测试运行器中添加上面的测试类,并执行它来收集所有错误。参见以下代码:

package guru.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());
    }
}

输出:

查看故障跟踪,它在一个位置跟踪所有错误:

JUnit ErrorCollector
JUnit ErrorCollector

JUnit ErrorCollector的优点

可以使用JUnit断言进行功能或GUI验证,例如

  1. 比较两个对象相等的 assertEquals(String message, Object expected, Object actual) 。
  2. 类似地, assertTrue(Boolean condition) 断言条件为真。

使用断言,验证测试变得很容易。但一个主要问题是,即使单个断言失败,测试执行也会停止。

测试连续性和恢复处理是测试自动化成功的关键。错误收集器是处理此类情况的最佳方法。

总结:

  • Junit错误收集器允许测试继续进行,即使在发现第一个问题并且测试在结束时失败之后也是如此
  • 错误收集器收集所有错误对象,并仅报告它,毕竟测试执行结束
  • 在错误收集器中添加所有错误的好处是可以一次验证所有错误
  • 错误收集器使用ErrorCollector.java提供的方法 addError(throwable err) 简单地添加错误。

IT赶路人

专注IT知识分享