当前位置: 首页 > 知识库问答 >
问题:

JUnit5中的assertAll与多断言

梁豪
2023-03-14

有什么理由将多个断言分组:

public void shouldTellIfPrime(){
    Assertions.assertAll(
            () -> assertTrue(isPrime(2)),
            () -> assertFalse(isPrime(4))
    );
}
public void shouldTellIfPrime(){
    Assertions.assertTrue(isPrime(2));
    Assertions.assertFalse(isPrime(4));
}

共有1个答案

阎建华
2023-03-14

关于assertall的有趣之处在于,它总是检查传递给它的所有断言,不管有多少个失败。如果全部通过,一切都很好--如果至少有一个失败,你会得到所有错误的详细结果(对这件事来说是正确的)。

它最好用于断言一组在概念上属于一起的属性。你的第一个本能是,“我想把它作为一个来断言”。

您的具体示例不是assertall的最佳用例,因为用素数和非素数检查isprime是相互独立的--以至于我建议为此编写两个测试方法。

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>
 类似资料:
  • 问题内容: 是否有理由将多个断言分组: 而不是这样做: 问题答案: 有趣的是,无论有多少失败,它总是检查传递给它的所有断言。如果一切顺利,那么一切都很好- 如果至少有一个失败,您将得到所有错误的详细结果(正确的解决方法)。 最好用于断言概念上属于一起的一组属性。您的第一个直觉将是“我想断言这是一个”。 例 您的特定示例不是最佳用例,因为使用质数和非质数进行检查是彼此独立的-如此之多,因此我建议为此

  • 使用JUnit5 assertAll,我调用一个方法来执行断言,但注意到当断言失败时,测试实际上通过了。调用下面这样的方法似乎被忽略了。 不过这很管用

  • 版本: 我得到以下错误:

  • 问题内容: 如何使用python的多处理池处理KeyboardInterrupt事件?这是一个简单的示例: 当运行上面的代码时,按时会引发,但是该过程只是在此时挂起,我必须在外部将其杀死。 我希望能够随时按下并导致所有进程正常退出。 问题答案: 这是一个Python错误。等待threading.Condition.wait()中的条件时,从不发送KeyboardInterrupt。复制: 直到wa

  • 我一直在查看JUnit5中参数化测试的示例(我是新手),但没有找到我想要的(除非我误解了如何使用它们)。 我遇到的所有示例都使用了诸如字符串、csv文件或methodSource之类的基本类型,但这些类型似乎都不适合我要做的事情。 如有任何帮助,不胜感激。

  • 我找不到像TestWatcher一样替代/工作的任何注释。 我的目标:有两个功能,这取决于测试结果。 成功?做某事 失败?做点别的