【问题标题】:Strange AllOf hamcrest matcher mismatch description奇怪的 AllOf hamcrest 匹配器不匹配描述
【发布时间】:2013-12-13 12:34:14
【问题描述】:

我正在使用 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 &lt;2&gt; &lt;5&gt; was greater than &lt;2&gt; 打印在控制台上。我只希望&lt;5&gt; was greater than &lt;2&gt;,因为这是其他匹配器返回的那种消息,例如lessThan 单独使用。

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

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

【问题讨论】:

    标签: java junit matcher hamcrest


    【解决方案1】:

    我会说这是一个(可用性)错误。简单地用“但是”这个词而不是空格来表达信息可能会更具表现力。

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

    通常,当您使用 allOf() 时,您将拥有多个匹配器,因此不匹配描述说明哪个匹配器损坏很有用。但我同意这个信息可以更清楚。

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2021-03-29
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多