AssertJ:使用allOf()时如何定位具体失败的断言条件?
在AssertJ中使用allOf组合Condition时获取精确失败信息
要让allOf组合Condition时能明确指出具体失败的条件,核心是给每个Condition添加动态生成的描述信息,将实际值的状态融入描述中,这样断言失败时就能直观看到哪个条件不满足以及原因。
改造后的代码示例
import org.assertj.core.api.Condition; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Conditions.allOf; // 带动态描述的Condition,失败时生成包含实际值的提示 final var condition1 = new Condition<String>( text -> text != null, text -> text == null ? "输入为null" : "输入不为null" ); final var condition2 = new Condition<String>( text -> text.equalsIgnoreCase("abc"), text -> String.format("输入'%s'与'abc'(忽略大小写)不匹配", text) ); // 使用is()方法检查allOf组合的Condition(也可根据场景用has()) assertThat(someString).is(allOf(condition1, condition2));
失败时的输出示例
当someString为"PQR"时,断言失败信息会变成:
Expecting actual: "PQR" to satisfy all of: - 输入不为null - 输入'PQR'与'abc'(忽略大小写)不匹配
这样就能清晰看到是第二个条件未满足,以及具体的不匹配原因。
补充说明
如果不想在Condition构造时直接写动态描述,也可以用describedAs()方法单独设置:
final var condition2 = new Condition<String>(text -> text.equalsIgnoreCase("abc"), "输入不匹配") .describedAs(text -> String.format("输入'%s'与'abc'(忽略大小写)不匹配", text));
内容的提问来源于stack exchange,提问作者coldcake71
相关产品推荐
相关产品推荐

