如何让Awaitility超时返回包含集合内容的有意义错误信息?
实现带集合动态内容的超时错误提示
想要在条件超时后得到包含集合实际内容的错误信息,仅使用alias()方法无法实现动态内容注入,需要通过自定义条件逻辑来实现:
方法一:自定义Condition接口实现
通过实现Condition接口,在describeFailure()方法中动态生成包含集合当前状态的错误描述:
Set<String> set = new HashSet<>(); await().until(new Condition<Boolean>() { @Override public Boolean get() { return set.contains("foo"); } @Override public String describeFailure() { return "'foo' should be in set=" + set; } });
当条件超时未满足时,会输出类似以下的错误信息:
Condition 'foo' should be in set=[bar] not fulfilled
方法二:结合lambda与异常抛出
在lambda表达式中直接判断条件,不满足时抛出包含集合内容的断言异常:
Set<String> set = new HashSet<>(); await().until(() -> { boolean isContained = set.contains("foo"); if (!isContained) { throw new AssertionError("'foo' should be in set=" + set); } return isContained; });
这种方式会在条件不满足时直接抛出包含集合当前内容的异常,超时后也会捕获并展示该错误信息。
内容的提问来源于stack exchange,提问作者michaldo
相关产品推荐
相关产品推荐

