JUnit4 fail() 在这里,但是 pass() 在哪里?

2022-08-31 11:09:08

JUnit4 库中有一个方法。我喜欢它,但缺乏库中不存在的方法。为什么会这样?fail()pass()

我发现我可以改用,但仍然看起来不合逻辑。assertTrue(true)

@Test
 public void testSetterForeignWord(){
  try {
   card.setForeignWord("");
   fail();
  } catch (IncorrectArgumentForSetter ex){
  }

 // assertTrue(true);
 }

答案 1

每当测试完成并通过时,随时调用返回语句。


答案 2

只要测试不引发异常,它就会通过,除非您的注释指定了预期的异常。我想可以抛出一个特殊的异常,JUnit总是将其解释为通过,以便使测试短路,但这将与通常的测试设计背道而驰(即假设成功并且仅在断言失败时才失败),并且,如果人们认为最好使用它,它将显着减慢大量通过测试的速度(由于异常创建的开销)。失败的测试不应该是常态,所以如果他们有这样的开销,这没什么大不了的。@Testpass()pass()

请注意,您的示例可以像这样重写:

@Test(expected=IncorrectArgumentForSetter.class)
public void testSetterForeignWord("") throws Exception {
  card.setForeignWord("");
}

此外,您应该赞成使用标准的 Java 异常。你应该是一个.IncorrectArgumentForSetterIllegalArgumentException


推荐