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

Hamcrest Matchers包含匹配器列表

汪正卿
2023-03-14

我试图使用org.hamcrest.matchers.contains(java.util.list >),但是编译器告诉我它无法解析该方法。

我甚至尝试了Hamcrest在这里给出的示例,但得到了相同的编译错误:

assertThat(Arrays.asList("foo", "bar"), contains(Arrays.asList(equalTo("foo"), equalTo("bar"))));

Error:(13, 9) java: no suitable method found for assertThat(java.util.List<java.lang.String>,org.hamcrest.Matcher<java.lang.Iterable<? extends java.util.List<org.hamcrest.Matcher<java.lang.String>>>>)
method org.hamcrest.MatcherAssert.<T>assertThat(T,org.hamcrest.Matcher<? super T>) is not applicable
  (actual argument org.hamcrest.Matcher<java.lang.Iterable<? extends java.util.List<org.hamcrest.Matcher<java.lang.String>>>> cannot be converted to org.hamcrest.Matcher<? super java.util.List<java.lang.String>> by method invocation conversion)
method org.hamcrest.MatcherAssert.<T>assertThat(java.lang.String,T,org.hamcrest.Matcher<? super T>) is not applicable
  (cannot instantiate from arguments because actual and formal argument lists differ in length)
method org.hamcrest.MatcherAssert.assertThat(java.lang.String,boolean) is not applicable
  (actual argument java.util.List<java.lang.String> cannot be converted to java.lang.String by method invocation conversion)
assertThat(Arrays.asList("foo", "bar"), (Matcher<? super List<String>>)contains(Arrays.asList(equalTo("foo"), equalTo("bar"))));

但随后我得到了另一个编译错误:

Error:(16, 88) java: inconvertible types  
required: org.hamcrest.Matcher<? super java.util.List<java.lang.String>> 
found:    org.hamcrest.Matcher<java.lang.Iterable<? extends java.util.List<org.hamcrest.Matcher<java.lang.String>>>>

有没有办法恰当地使用这种方法?

共有1个答案

陈开宇
2023-03-14

问题是arrays.aslist(equalTo(“foo”),equalTo(“bar”));将为您提供list > 类型,但您真的想要list > 。您必须显式指定类型:

assertThat(str, 
    contains(Arrays.<Matcher<? super String>>asList(
        equalTo("foo"), 
        equalTo("bar"))));
 类似资料:
  • 我试图测试集合中是否有toString()方法返回特定字符串的项。我尝试使用优秀的Hamcrest匹配类,通过将contains与,但不知何故,它的无法匹配项目,即使该项目存在于集合中。 这里有一个例子: 上述断言是不成功的。这是信息: 看起来像是配对者。contains matcher尝试在列表上迭代,但matcher失败。hasToString matcher在第一项中失败,并使迭代的其余部分

  • 问题内容: 如何通过所有多词搜索仅获取经过过滤的匹配结果。我有这个示例表,其中titleid是一个映射int字段,personid是一个关键字: 删除结果为: 使用这样的示例查询: 我得到以下结果: 也许这会有所帮助,我在sql中进行了查询并获得了预期的结果。我所做的是让查询给我与搜索到的参数数量匹配的titleid之和。这只是为了更多地自我解释,其思想是使用elasticsearch。 问题答案

  • 我试图遍历一个字典,其中每个键都包含一个列表,该列表依次包含0到20个子列表。目标是迭代字典1的值,检查它们是否在字典2的任何子列表中用于相同的密钥,如果是,则将1添加到计数器中,而不再次考虑子列表。 代码看起来有点像这样: 这显然不起作用,主要是因为代码无法通过列表和子列表进行分层检查,部分原因是可能不正确的迭代语法。我对嵌套循环和迭代没有最大的把握,这使得这很痛苦。另一种选择是首先使用以下方法

  • 很抱歉标题太长,但我的问题如下; 我有这些课程; 和 和 如果只有断言它拥有的列表,我会使用以下自定义匹配器;

  • 问题内容: 我知道可以匹配一个单词,然后使用其他工具(例如grep -v)将匹配项反转。但是,是否可以hede使用正则表达式来匹配不包含特定单词的行? 输入: 码: 所需的输出: 问题答案: 正则表达式不支持逆匹配的说法并不完全正确。您可以使用否定环顾模仿此行为: 上面的正则表达式将匹配任何不包含(sub)字符串’hede’的字符串或没有换行符的行。如前所述,这是不是正则表达式是“好”的(或应该做

  • 我可以使用哪种匹配器? { 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