此问题在此处已有答案:
Don't let test stop on failure(1个答案)
六年前就关门了。
在我的测试用例中,必须使用多个Assert。问题是如果一个Assert失败,那么执行就会停止。我希望该测试用例即使在遇到Assert失败后也能继续执行,并且在执行后显示所有Assert失败。
例如:
assertTrue("string on failure",condition1);
assertTrue("string on failure",condition2);
assertTrue("string on failure",condition3);
assertTrue("string on failure",condition4);
assertTrue("string on failure",condition5);
在这个例子中,我希望如果assert在条件2下失败,那么它应该继续执行,并在完成执行后显示所有失败。
3条答案
按热度按时间pbossiut1#
对于纯JUnit解决方案,请使用ErrorCollectorTestRule来处理Assert。
在测试执行完成之前,ErrorCollector规则不会返回报告。
在您的具体示例中:
会变成
eeq64g8w2#
您要查找的功能称为软Assert,请尝试assertj
软Assert将允许执行到下一个步骤,而不会在失败时抛出异常。在
assertAll()
方法结束时,一次性抛出所有收集的错误。xiozqbni3#
这里的另一个选项是许多人说无论如何都应该一直做的最佳实践:在每个测试用例中只放置一个Assert。
通过这样做,每个潜在故障以某种方式彼此隔离;并且您可以直接得到您所要查找的内容--因为JUnit将准确地告诉您哪些测试失败了,哪些测试通过了,而无需引入其他概念。
(您可以看到,即使那些其他概念(如ErrorCollector或SoftAssertions)非常容易使用,它们也会给代码增加一点复杂性;使其更难阅读和理解)