JUnit ErrorCollector @Rule 示例

在正常情况下,每当您在测试执行期间发现任何错误时,您都会停止测试,修复错误并重新运行测试。

但是, JUnit 略有不同的方法。 JUnit 错误收集器,即使发现问题或测试失败,您仍然可以继续执行测试。错误收集器收集所有错误对象,并在测试执行结束后仅报告一次。

为什么要使用错误收集器?

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

为了这, JUnit 使用 @Rule 注解 用于创建错误收集器对象。创建错误收集器对象后,您可以使用方法轻松地将所有错误添加到对象中 addError(可抛出的错误). 如你所知, 可投掷 是超类 特殊课程误差 上课 Java。当您以这种方式添加错误时,这些错误将被记录在 JUnit 测试结果 。

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

备注:在使用简单 assert 或 try/catch 块的情况下,无法使用错误收集器方法。

样例代码

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

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

jUnit 中的 @Rule 是什么?

JUnit 提供特殊类型的测试处理, 测试用例 或使用测试套件 @rule 注释. 使用@rule,您可以轻松添加或重新定义测试的行为。

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

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

@Rule				
public ErrorCollector collector= new ErrorCollector();

使用 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());							
   }		
}      

输出:

查看在一个地方跟踪所有错误的故障跟踪:

测试运行器。Java 输出

的好处 JUnit 错误收集器

您可以使用 JUnit 用于功能或 GUI 验证的断言,例如

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

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

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

总结

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