当前位置: 首页 > 知识库问答 >
问题:

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

舒飞捷
2023-03-14
@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());

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

事实上,不同的匹配器以不同的格式返回消息是一个很大的问题,因为我试图编写一些自定义的验证框架,该框架使用匹配器,并且能够在出现任何错误时返回良好的人类可读的消息。我似乎不能为此目的使用descripbemismatch方法...

共有1个答案

柴嘉禧
2023-03-14

我会说这是一个(可用性)bug。只要用“但是”这个词代替空格,信息就会更有表现力。

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

通常,当您使用allOf()时,您会有不止一个匹配器,因此使用不匹配描述来说明哪个匹配器坏了是很有用的。但我同意信息可能会更清楚。

 类似资料:
  • 最近,我为jaxb生成的元素做了一个自定义匹配器,遇到了这样的场景: 先决条件: 我有一个自定义Matcher,它扩展了BaseMatcher,覆盖了方法describeTo和DescribeMatch(当然还有matches…) 我使用的是assertThat(actualObject,而不是MyMatcherStaticRunMethod(expectedObject)) 当断言失败时,结果是

  • 我可以使用哪种匹配器? { test: /\.js$/, loader: 'babel-loader' } - Matches just .js { test: /\.(js|jsx)$/, loader: 'babel-loader' } - Matches both js and jsx Generally put it's just a JavaScript regex so standar

  • 我正在为我的 REST API 控制器编写测试,我需要检查返回的 对象中的 值,请参阅此测试方法: 但是测试产生了这个错误: 似乎ID被正确返回,但被序列化为不同的结构。 我的代码有什么问题?

  • 我的密码应类似于: “密码应包含至少一个大写字母,一个小写字母,一个数字和一个特殊字符,长度至少为八个字符” 我使用的模式是:

  • 我尝试检查密码与功能password_verify发布的用户密码和散列从数据库。 首先,我如何生成密码和哈希: 登录时验证: 总是收到密码错误的消息。我阅读了这个php密码\u散列和密码\u验证问题没有匹配,但我手动测试了散列字符串,以验证文本字符串。 哈希字符串:$2y$10$SwSq7OukPpN/QJ8YOdKgquJQ28fQbNY1Q3JdTFnoe。2VxD/D2RXBS 通过电子邮件

  • 我想同时执行精确的单词匹配和部分单词/子字符串匹配。例如,如果我搜索“test product”,那么我应该能够在结果中找到“test”和“product”相关的文本。我用下面的match查询搜索弹性搜索,它不是给我精确的匹配,而是给我一些更多的不确定的匹配。示例是在结果中给出与“sample”相关的文本。 我使用弹性搜索6.3 请在下面找到我的查询 搜索结果:“Hits”:[{“_index”: