assertAll 的有趣之处在于它always checks all of the assertions that are passed to it,不管有多少失败。如果全部通过,则一切正常 - 如果至少有一个失败,您将获得所有错误的详细结果(并且就此而言是正确的)。
它最适合用于断言在概念上属于一起的一组属性。你的第一直觉是,“我想把它作为一个人来断言”。
示例
您的具体示例不是assertAll 的最佳用例,因为用素数和非素数检查isPrime 是相互独立的——以至于我建议为此编写两种测试方法。
但假设您有一个简单的类,例如包含字段 city、street、number 的地址,并且想要断言这些是您所期望的:
Address address = unitUnderTest.methodUnderTest();
assertEquals("Redwood Shores", address.getCity());
assertEquals("Oracle Parkway", address.getStreet());
assertEquals("500", address.getNumber());
现在,一旦第一个断言失败,您将永远看不到第二个断言的结果,这可能会很烦人。有很多方法可以解决这个问题,JUnit Jupiter 的 assertAll 就是其中之一:
Address address = unitUnderTest.methodUnderTest();
assertAll("Should return address of Oracle's headquarter",
() -> assertEquals("Redwood Shores", address.getCity()),
() -> assertEquals("Oracle Parkway", address.getStreet()),
() -> assertEquals("500", address.getNumber())
);
如果被测方法返回错误的地址,这就是你得到的错误:
org.opentest4j.MultipleFailuresError:
Should return address of Oracle's headquarter (3 failures)
expected: <Redwood Shores> but was: <Walldorf>
expected: <Oracle Parkway> but was: <Dietmar-Hopp-Allee>
expected: <500> but was: <16>