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

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

如何强制JUnit在失败时不中断?

ty

最佳答案

使用标准的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 []中的条目数必须与构造函数的参数数相对应,并且类型也必须相对应。

10-07 19:31
查看更多