我试图测试集合中是否有toString()方法返回特定字符串的项。我尝试使用优秀的Hamcrest匹配类,通过将contains与匹配器相结合来实现。hasToString
,但不知何故,它的匹配器。contains
无法匹配项目,即使该项目存在于集合中。
这里有一个例子:
class Item {
private String name;
public Item(String name){
this.name = name;
}
public String toString(){
return name;
}
}
// here's a sample collection, with the desired item added in the end
Collection<Item> items = new LinkedList<Item>(){{
add(new Item("a"));
add(new Item("b"));
add(new Item("c"));
}};
Assert.assertThat(items, Matchers.contains(Matchers.hasToString("c")));
上述断言是不成功的。这是信息:
java.lang.AssertionError:
Expected: iterable containing [with toString() "c"]
but: item 0: toString() was "a"
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
at org.junit.Assert.assertThat(Assert.java:865)
at org.junit.Assert.assertThat(Assert.java:832)
看起来像是配对者。contains matcher尝试在列表上迭代,但matcher失败。hasToString matcher在第一项中失败,并使迭代的其余部分无效。用于匹配器的Hamcrest javadoc。内容包括:
msgstr"为Iterable创建一个匹配器,该匹配器在通过检查的Iterable生成满足指定匹配器的单个项时进行匹配。对于正匹配,被检查的迭代只能产生一个项”
我做错什么了吗?
我想你在找Matchers.has项目(...)
Assert.assertThat(items, Matchers.hasItem(Matchers.hasToString("c")));
哪些州
为Iterables创建匹配器,该匹配器仅在通过检查的Iterable
生成至少一个与指定的itemMatcher
匹配的项时匹配。在匹配过程中,一旦找到匹配项,将停止遍历已检查的Iterable
。
匹配器。包含
,如您所述,
为Iterables创建匹配器,该匹配器在通过检查的Iterable
生成满足指定匹配器的单个项时匹配。对于正匹配,被检查的iterable只能产生一个项。
在我看来,这意味着Iterable
中应该只有一个元素。
我试图使用org.hamcrest.matchers.contains(java.util.list >),但是编译器告诉我它无法解析该方法。 我甚至尝试了Hamcrest在这里给出的示例,但得到了相同的编译错误: 但随后我得到了另一个编译错误: 有没有办法恰当地使用这种方法?
最近,我为jaxb生成的元素做了一个自定义匹配器,遇到了这样的场景: 先决条件: 我有一个自定义Matcher,它扩展了BaseMatcher,覆盖了方法describeTo和DescribeMatch(当然还有matches…) 我使用的是assertThat(actualObject,而不是MyMatcherStaticRunMethod(expectedObject)) 当断言失败时,结果是
我的密码应类似于: “密码应包含至少一个大写字母,一个小写字母,一个数字和一个特殊字符,长度至少为八个字符” 我使用的模式是:
Reginald是另一个Rexx解释器,由Jeff Glantt开发,并对如何运行Rexx程序进行了一些定制。 在本节中,我们将了解如何获得Reginald并在其中运行一些Rexx程序。 环境设置 (Environment Setup) 第一步是下载Reginald文件的环境设置。 这可以通过以下网站链接完成 - http://www.manmrk.net/tutorials/rexx/Regin
问题内容: 如何通过所有多词搜索仅获取经过过滤的匹配结果。我有这个示例表,其中titleid是一个映射int字段,personid是一个关键字: 删除结果为: 使用这样的示例查询: 我得到以下结果: 也许这会有所帮助,我在sql中进行了查询并获得了预期的结果。我所做的是让查询给我与搜索到的参数数量匹配的titleid之和。这只是为了更多地自我解释,其思想是使用elasticsearch。 问题答案