是否有任何理由对多个断言进行分组:
public void shouldTellIfPrime(){
Assertions.assertAll(
() -> assertTrue(isPrime(2)),
() -> assertFalse(isPrime(4))
);
}
而不是这样做:
public void shouldTellIfPrime(){
Assertions.assertTrue(isPrime(2));
Assertions.assertFalse(isPrime(4));
}
原文由 Wilhelm Olejnik 发布,翻译遵循 CC BY-SA 4.0 许可协议
assertAll
的有趣之处在于它 总是检查传递给它的所有断言, 无论有多少失败。如果全部通过,则一切都很好 - 如果至少有一个失败,您将获得所有错误的详细结果(并且就此而言是正确的)。它最适合用于断言一组在概念上属于一起的属性。您的第一直觉是“我想将其断言为一个”。
例子
您的具体示例不是
assertAll
的最佳用例,因为检查isPrime
与素数和非素数是相互独立的 - 以至于我建议编写两个测试为此的方法。但是假设你有一个简单的类,比如一个带有字段的地址
city
,street
,number
你希望断言那些是什么–现在,一旦第一个断言失败,您将永远看不到第二个断言的结果,这会很烦人。有很多方法可以解决这个问题,JUnit Jupiter 的
assertAll
就是其中之一:如果被测方法返回错误的地址,这就是您得到的错误: