不要让测试在失败时停止

use*_*611 2 junit junit4

我正在寻找以下(简化)场景的最佳实践:

@Test
public void someTest() {
  for(String someText : someTexts) {
    Assert.true(checkForValidity(someText));
  }
}
Run Code Online (Sandbox Code Playgroud)

这个测试迭代了数千个文本,在这种情况下,我不希望每次失败都停止它.我希望缓冲错误,并在最后一个错误的情况下失败.JUnit有没有为我的目标做些准备?

kry*_*ger 8

首先,实现这一点并不是真正的正确方法.JUnit允许通过使用测试运行器定义输入/输出的集合来参数化测试Parametrized.这样做可以确保每个测试用例成为一个独特的实例,使测试报告清楚地说明哪些样本通过,哪些样本失败.

如果您仍然坚持按照自己的方式进行操作,那么您应该查看AssertJ的Soft Assertions,它允许"吞咽"单个断言失败,累积它们并且仅在测试完成后报告.链接的文档部分使用了一个很好的例子,绝对值得一读.

  • JUnit本身使用[ErrorCollector](http://junit.org/apidocs/org/junit/rules/ErrorCollector.html)规则提供软断言. (8认同)