assertAll与JUnit5中的多个断言

是否有理由将多个断言分组:

public void shouldTellIfPrime(){

Assertions.assertAll(

() -> assertTrue(isPrime(2)),

() -> assertFalse(isPrime(4))

);

}

而不是这样做:

public void shouldTellIfPrime(){

Assertions.assertTrue(isPrime(2));

Assertions.assertFalse(isPrime(4));

}

回答:

有趣的assertAll是,无论有多少失败,它总是检查传递给它的所有断言。如果一切顺利,那么一切都很好-

如果至少有一个失败,您将得到所有错误的详细结果(正确的解决方法)。

最好用于断言概念上属于一起的一组属性。您的第一个直觉将是“我想断言这是一个”。

回答:

您的特定示例不是最佳用例,assertAll因为isPrime使用质数和非质数进行检查是彼此独立的-如此之多,因此我建议为此编写两种测试方法。

但是,假设您有一个简单的类,例如带有字段city,的地址streetnumber并且想断言那些正是您所期望的:

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>

以上是 assertAll与JUnit5中的多个断言 的全部内容, 来源链接: utcz.com/qa/422816.html

回到顶部