我应该将 try-catch 块与断言一起使用吗

Should I use try-catch block with Assertions

这个问题想了很久,想知道要不要用try-catch Block with assertion? 例如-

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)。