Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 我应该在断言中使用try-catch块吗_Java_Unit Testing_Try Catch_Assertions - Fatal编程技术网

Java 我应该在断言中使用try-catch块吗

Java 我应该在断言中使用try-catch块吗,java,unit-testing,try-catch,assertions,Java,Unit Testing,Try Catch,Assertions,这个问题已经存在很长一段时间了,我想知道是否应该使用带有断言的try-catch块? 比如说- 1. assertEquals(actual, expected); 2. try { assertEquals(actual, expected); } catch(AssertionError e) { e.printStackTrace(); } 好的做法是什么?1还是2? TIA不,当然你不应该那样做。断言的目的是,当它失败时,抛出断言错误,以便将此通知测试单元引擎 因此,简单地说,做断言。

这个问题已经存在很长一段时间了,我想知道是否应该使用带有断言的try-catch块? 比如说-

1. assertEquals(actual, expected);
2. try
{
assertEquals(actual, expected);
}
catch(AssertionError e)
{
e.printStackTrace();
}
好的做法是什么?1还是2?
TIA不,当然你不应该那样做。断言的目的是,当它失败时,抛出断言错误,以便将此通知测试单元引擎

因此,简单地说,做断言。并使其工作:)。如果失败了,你应该解决问题

另一方面,如果您想要测试的是一个异常是否被抛出。您可以通过以下几种方式进行:

@Test(expected = NullPointerException.class)
public void myTestForException() {
    callMethodThatThrowsNullPointerException();
}
或者您可以使用try/catch:

@Test
public void myTest() {
    try {
        fail("Should throw whatever");
    } catch (MyException e) {
        // Everything is fine, test passed
    }
}

在测试中使用JUnit、TestNG或诸如此类的东西的全部意义在于,您可以在项目中进行数千个测试,并使测试自动化。运行测试可能是构建过程的一部分,您可以得到一些关于有多少测试通过的反馈。当您的项目不仅仅由少数几个类组成时,这是绝对必要的

您关于捕获assertEquals抛出的错误并将其报告给控制台的想法并不好。主要是因为当断言失败时,它使测试通过。这意味着无论您使用什么来运行测试(例如,Jenkins),都会报告错误的结果。例如,您将看到,5000个测试中有5000个通过了测试,即使很多测试都包含失败的断言。突然间,你的一大套测试几乎没有什么价值

此外,您如此仔细地打印的堆栈跟踪将会丢失,因为所有各种测试都会产生大量的输出


所以简单的回答是你的想法(1)是正确的。每个人都是这样做的。这意味着你的测试结果得到了适当的报告。您不应该像您的想法(2)那样编写测试。

捕获异常有什么好处?当然,您希望测试失败……有一种更好的测试方法,抛出异常。使用JUnit ExpectedException规则。它们记录在JUnit网站上。