使用 AssertJ 对多个条件进行断言

问题描述 投票:0回答:2

我试图在assertJ上设置乘法条件,但在examplesGit中找不到。

我现在写的是:

    assertThat(A.getPhone())
            .isEqualTo(B.getPhone());
    assertThat(A.getServiceBundle().getId())
            .isEqualTo(B.getServiceBundle().getId());

但想要有类似的东西:

            assertThat(A.getPhone())
            .isEqualTo(B.getPhone())
            .And
            (A.getServiceBundle().getId())
            .isEqualTo(B.getServiceBundle().getId());

如果我使用链接,这将不起作用,因为我需要差异数据(id 而不是电话)。是否有可能将其全部混合到 one-assertJ 命令中?看起来没有任何可能性(算法方面),但也许对 && 语句有其他想法?

谢谢

java unit-testing junit assertj
2个回答
17
投票

您可以将软断言与AssertJ一起使用来组合多个断言并一次性评估它们。软断言允许组合多个断言,然后在一个操作中评估这些断言。这有点像“事务性”断言。您设置断言包然后提交它。 SoftAssertions phoneBundle = new SoftAssertions(); phoneBundle.assertThat("a").as("Phone 1").isEqualTo("a"); phoneBundle.assertThat("b").as("Service bundle").endsWith("c"); phoneBundle.assertAll();

这有点冗长,但它是“&&”的替代方案 - 表达你的断言。错误报告实际上非常精细,因此它指向失败的部分断言。所以上面的例子将打印:

org.assertj.core.api.SoftAssertionError: The following assertion failed: 1) [Service bundle] Expecting: <"b"> to end with: <"c">

实际上,由于详细的错误消息,这比“&&”选项更好。


6
投票
SoftAssertions

的替代方案是 JUnit 的

assertAll
:
import static org.junit.jupiter.api.Assertions.assertAll; assertAll( () -> assertThat("a").as("Phone 1").isEqualTo("a"), () -> assertThat("b").as("Service bundle").endsWith("c") );

	
© www.soinside.com 2019 - 2024. All rights reserved.