Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最佳实践:fail()与assertTrue(false)_Java_Testing_Junit - Fatal编程技术网

Java 最佳实践:fail()与assertTrue(false)

Java 最佳实践:fail()与assertTrue(false),java,testing,junit,Java,Testing,Junit,当故意使测试用例失败时(例如,当没有抛出异常时),我看到人们同时使用fail()和assertTrue(false)。使用其中一种有什么好处吗 try { //method call that should throw exception fail("oops"); } catch (Exception e) {} vs 在@Test注释中使用JUnit的预期参数 @Test(expected = ArithmeticException.class) public void

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

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


@Test
注释中使用JUnit的
预期
参数

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

如果未引发
算术异常
,则此操作将失败。

assertTrue just calls失败


IMHO fail()更简单、更清晰。

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

使用
fail
,否则会有人看到日志中的失败并思考“什么是假的,什么才是真的”

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

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

在功能上,没有。但是,
fail()
更清楚地表达了意图,因此效果更好。

为什么要让测试失败?当异常本应被抛出但没有被抛出时。您不同意我的示例吗?异常应该是异常。一个好的代码不应该期待异常,您的代码应该在抛出异常之前避免异常。@Victor通常我同意但是如果您有一个复杂的异常堆栈(大量自定义异常,可能会冒泡)您可能希望确保在不同的情况下抛出正确的异常。@Victor我认为您编写的单元测试是错误的,如果您从未测试在错误情况下抛出的异常。您希望检查失败路径和成功路径。这通常需要检查是否抛出了异常。OP does说“例如,当没有抛出异常时“可能还有其他情况。我发现,
EpectedException
规则是测试预期异常的一种更强大的机制,因为它可以放在被测试方法的前面,从而确保引发异常的不是测试设置。但我们预期会引发异常。因此,如果它不成功,它应该失败。为什么要费心尝试/捕获逻辑?我们想要例外,同意吗NullUserException@BeRecursive关于您对Izkata的响应,我已经看到了很多令人惊讶的情况,当我期待一个NullPointerException并且测试通过时,因为它是从错误的地方抛出的。我不想过分强调这个主题,但根据我的经验,在处理诸如NPE、IAE和运行时之类的异常时,它并不是“非常不可能”的