gpt4 book ai didi

java - 奇怪的 AllOf hamcrest 匹配器不匹配描述

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:39 24 4
gpt4 key购买 nike

我正在使用 hamcrest 1.3。其实现matches(Object o, Description mismatch)看起来像这样:

@Override
public boolean matches(Object o, Description mismatch) {
for (Matcher<? super T> matcher : matchers) {
if (!matcher.matches(o)) {
mismatch.appendDescriptionOf(matcher).appendText(" ");
matcher.describeMismatch(o, mismatch);
return false;
}
}
return true;
}

在描述不匹配时,它首先附加失败的匹配器的描述,然后才是实际的不匹配。这会产生一些非常奇怪的消息。

例如,如果我写:

Description description = new StringDescription();
allOf(lessThan(2)).describeMismatch(5, description);
System.out.println(description.toString());

然后 a value less than <2> <5> was greater than <2>打印控制台。我希望只有 <5> was greater than <2> ,因为这是其他匹配器返回的消息类型,例如lessThan单独使用。

我的问题是:这是错误还是我遗漏了什么?

不同的匹配器以不同的格式返回消息这一事实很重要,因为我试图编写一些使用匹配器的自定义验证框架,并且能够在出现任何问题时返回良好的人类可读消息。看来我不能使用 describeMismatch为此目的的方法...

最佳答案

我会说这是一个(可用性)错误。仅使用“但是”一词而不是空格,可以使消息更具表现力。

值得指出的是,不匹配消息通常由 JUnit 的 assertThat() 和一些附加词显示:“Expected”(显示 Matcher 描述)、“Actual”(显示不匹配)。这样就更清楚了。

通常,当您使用 allOf() 时,您会有多个匹配器,因此对于不匹配描述来说,说明哪个匹配器失效是很有用的。但我同意信息可以更清晰。

关于java - 奇怪的 AllOf hamcrest 匹配器不匹配描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20566668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com