2012-04-13 76 views
2

我该如何使用JUnit不会终止断言失败,而只是记录它们?JUnit只是登录失败?

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

我怎么能强迫的JUnit不上的故障打破?

TY

+1

这是一个坏主意。一旦出现故障,您可能会处于不良状态,而进一步的故障可能更多是由于初始状态不佳所致,而不是由于任何实际问题,这意味着您记录的大部分内容将毫无用处。具有小的测试方法并让它们在故障时退出的观点是,启动状态是众所周知的。考虑重新进行测试,以便进行更多的小型独立测试。 – 2012-04-13 13:15:24

+0

我宁愿做@NathanHughes建议的任何其他伎俩来做你想做的事情。 – 2012-04-13 13:31:02

+0

完全同意@Nathan这里。当不符合断言时,测试必须失败。 – 2012-04-13 13:31:42

回答

1

你不能做你想要与标准的JUnit什么,与你的测试,因为它们。问题是,assertXXX方法实际上会抛出Exceptions(AssertionError),所以你不能使用普通的断言,并在抛出异常后从这个点继续。 JUnit捕获这些AssertIonErrors并做正确的事情。

一种选择是使用,因为路德维希建议的,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 []都被传递给测试类的构造函数。因此,测试类的新实例将用于列表中的每个条目。

条目的对象的数目[]必须对应于参数给构造的数目,和类型具有对应为好。

+0

这声音promissing。但是如果我有6个参数呢? 3为输入测试方法,3为验证结果? – membersound 2012-04-14 19:28:12

+0

构造函数根据需要获取尽可能多的参数。您只需在上面示例中注释为@Parameters,data()的方法中定义适当数量的对象。 – 2012-04-14 19:43:05

1

如果你想看到一个试验可能失败的所有原因,而不是只是第一个,你需要创建的原因列表测试失败,并抛出一个错误,如果该列表不最后是空的。

+0

我也是这么做的。 – 2012-04-13 14:37:38

0

如果您使用像junit任务一样的构建工具,则有haltonfailure属性,您可以将其放到no,以便在测试失败时不会停止构建过程。

3

也许ErrorCollector规则会帮助你

+0

+1是的,这是正确的答案。 – Gangnus 2013-04-04 20:28:33