我应该将 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)。
这个问题想了很久,想知道要不要用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)。