14

当故意使测试用例失败时(例如没有抛出异常时),我看到人们同时使用fail() 和assertTrue(false)。使用其中一种有什么好处吗?

try {
    //method call that should throw exception
    fail("oops");
} catch (Exception e) {}

对比

try {
    //method call that should throw exception
    assertTrue("oops", false);
} catch (Exception e) {}
4

5 回答 5

21

使用其中一种有什么好处吗?

从功能上讲,没有。但是,fail()更清楚地传达意图,因此更好。

于 2012-10-17T16:55:44.123 回答
13

在注解中使用 JUnit 的expected参数@Test

@Test(expected = ArithmeticException.class)  
public void divisionWithException() {  
    int i = 1/0;
}  

如果 anArithmeticException没有被抛出,这将失败。

于 2012-10-17T16:54:51.987 回答
5

assertTrue 只是调用失败。

恕我直言 fail() 更简单,更清晰。

于 2012-10-17T16:55:04.717 回答
3

使用fail,否则有人会在日志中查看失败并认为“什么是假的应该是真的”。

于 2012-10-17T16:55:27.927 回答
1

两者都可以使用(虽然fail更好,因为这是真正的意图),但由于您使用的是 JUnit,因此您可以@Test(expected=MyException.class)改用。

于 2012-10-17T16:55:07.200 回答