我该如何使用JUnit不会终止断言失败,而只是记录它们?JUnit只是登录失败?
我的目标是失败,如果存在的日志信息,并打印出来。因为我想遍历一个大列表,并想知道哪些元素失败。
我怎么能强迫的JUnit不上的故障打破?
TY
我该如何使用JUnit不会终止断言失败,而只是记录它们?JUnit只是登录失败?
我的目标是失败,如果存在的日志信息,并打印出来。因为我想遍历一个大列表,并想知道哪些元素失败。
我怎么能强迫的JUnit不上的故障打破?
TY
你不能做你想要与标准的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 []都被传递给测试类的构造函数。因此,测试类的新实例将用于列表中的每个条目。
条目的对象的数目[]必须对应于参数给构造的数目,和类型具有对应为好。
这声音promissing。但是如果我有6个参数呢? 3为输入测试方法,3为验证结果? – membersound 2012-04-14 19:28:12
构造函数根据需要获取尽可能多的参数。您只需在上面示例中注释为@Parameters,data()的方法中定义适当数量的对象。 – 2012-04-14 19:43:05
如果你想看到一个试验可能失败的所有原因,而不是只是第一个,你需要创建的原因列表测试失败,并抛出一个错误,如果该列表不最后是空的。
我也是这么做的。 – 2012-04-13 14:37:38
如果您使用像junit任务一样的构建工具,则有haltonfailure
属性,您可以将其放到no
,以便在测试失败时不会停止构建过程。
这是一个坏主意。一旦出现故障,您可能会处于不良状态,而进一步的故障可能更多是由于初始状态不佳所致,而不是由于任何实际问题,这意味着您记录的大部分内容将毫无用处。具有小的测试方法并让它们在故障时退出的观点是,启动状态是众所周知的。考虑重新进行测试,以便进行更多的小型独立测试。 – 2012-04-13 13:15:24
我宁愿做@NathanHughes建议的任何其他伎俩来做你想做的事情。 – 2012-04-13 13:31:02
完全同意@Nathan这里。当不符合断言时,测试必须失败。 – 2012-04-13 13:31:42