我正在使用hamcrest 1.3。其實現的matches(Object o, Description mismatch)
看起來像這樣:奇怪AllOf Hamcrest匹配器不匹配說明
@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
方法...