我试图在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 命令中?看起来没有任何可能性(算法方面),但也许对 && 语句有其他想法?
谢谢
您可以将软断言与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">
实际上,由于详细的错误消息,这比“&&”选项更好。
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")
);