JUnit只记录失败?

时间:2012-04-13 13:05:23

标签: java junit

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

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

如何强制JUnit在故障时不中断?

TY

4 个答案:

答案 0 :(得分:3)

也许ErrorCollector规则可以帮助您

答案 1 :(得分:1)

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

答案 2 :(得分: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 []中的条目数必须与构造函数的参数数量相对应,并且类型也必须对应。

答案 3 :(得分:0)

如果您正在使用像junit任务一样的构建工具,那么您可以将haltonfailure属性放到no,这样就不会停止构建过程测试失败。