2

如何使用 JUnit 在断言失败时不终止,而只是记录它们?

如果存在日志消息,我的目标是失败,并将它们打印出来。因为我想遍历一个大列表,并且想知道哪些元素失败了。

如何强制 JUnit 不因失败而中断?

4

4 回答 4

3

也许ErrorCollector规则会帮助你

于 2012-04-13T13:13:27.000 回答
1

如果您想查看测试可能失败的所有原因,而不仅仅是第一个,您需要创建一个测试失败的原因列表,如果列表最后不为空,则抛出错误。

于 2012-04-13T13:09:00.760 回答
1

你不能用标准的 JUnit 做你想做的事,你的测试就是这样。问题是 assertXXX 方法实际上会抛出异常(AssertionError),因此您不能使用正常的断言并从抛出异常后的点恢复。JUnit 捕获这些 AssertIonErrors 并做正确的事。

正如 Ludwig 建议的那样,一种替代方法是使用 ErrorCollector 规则,但这将意味着重写我想象的相当一部分测试。

如果您的目标是遍历一个大列表,请查看Parameterized。这允许您迭代单个测试方法,每次使用不同的数据:

@RunWith(Parameterized.class)
public class FibonacciTest {
  @Parameters
  public static List<Object[]> data() {
    return Arrays.asList(new Object[][] {
      { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }
    });
  }

  private int fInput;

  private int fExpected;

  public FibonacciTest(int input, int expected) {
    fInput= input;
    fExpected= expected;
  }

  @Test
  public void test() {
    assertEquals(fExpected, Fibonacci.compute(fInput));
  }
}

data() 返回 Object[] 的列表。列表中的每个 Object[] 都被传递给测试类的构造函数。因此,列表中的每个条目都使用测试类的新实例。

Object[] 中的条目数必须与构造函数的参数数相对应,并且类型也必须对应。

于 2012-04-13T14:04:04.077 回答
0

如果您在junit任务中使用诸如 ant 之类的构建工具,则可以设置一个haltonfailure属性,no以便在测试失败时它不会停止您的构建过程。

于 2012-04-13T13:10:33.460 回答