JUnit4 fail()在这里,但是pass()在哪里?
问题内容:
fail()
JUnit4库中有一个方法。我喜欢它,但是缺少pass()
一种库中不存在的方法。为什么会这样呢?
我发现我可以assertTrue(true)
代替使用,但看起来仍然不合逻辑。
@Test
public void testSetterForeignWord(){
try {
card.setForeignWord("");
fail();
} catch (IncorrectArgumentForSetter ex){
}
// assertTrue(true);
}
问题答案:
只要测试没有引发异常,它就会通过,除非您的@Test
注释指定了预期的异常。我想pass()
可能会抛出一个特殊的异常,JUnit总是将其解释为通过,从而使测试短路,但这会违背通常的测试设计(即假设成功,并且仅在断言失败时失败),并且如果有人最好使用的想法pass()
,这将大大减慢大量通过测试的速度(由于异常创建的开销)。失败的测试不应该成为常态,因此,如果有这些开销,那就没什么大不了的。
请注意,您的示例可以这样重写:
@Test(expected=IncorrectArgumentForSetter.class)
public void testSetterForeignWord("") throws Exception {
card.setForeignWord("");
}
另外,您应该赞成使用标准Java异常。您IncorrectArgumentForSetter
可能应该是一个IllegalArgumentException
。