有趣的assertAll
是,它总是检查所有传递给它的断言,无论有多少失败。如果全部通过,一切都很好 - 如果至少有一个失败,您将获得所有错误的详细结果(并且就此而言是正确的)。
它最适合用于断言在概念上属于一起的一组属性。你的第一直觉是,“我想把它作为一个来断言”。
例子
您的具体示例不是最佳用例,assertAll
因为检查isPrime
素数和非素数是相互独立的 - 以至于我建议为此编写两种测试方法。
但是假设您有一个简单的类,例如带有字段city
,的地址street
,number
并且想要断言这些是您所期望的:
Address address = unitUnderTest.methodUnderTest();
assertEquals("Redwood Shores", address.getCity());
assertEquals("Oracle Parkway", address.getStreet());
assertEquals("500", address.getNumber());
现在,一旦第一个断言失败,您将永远看不到第二个断言的结果,这可能会很烦人。有很多方法可以解决这个问题,JUnit JupiterassertAll
就是其中之一:
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>