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

汉克雷斯特配对者。包含匹配器不工作(?)

贲俊才
2023-03-14

我试图测试集合中是否有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生成满足指定匹配器的单个项时进行匹配。对于正匹配,被检查的迭代只能产生一个项”

我做错什么了吗?

共有1个答案

西门奇希
2023-03-14

我想你在找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。 问题答案