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