当前位置: 首页 > 面试题库 >

是否有一个“针对每个”匹配器的Hamcrest,可以断言Collection或Iterable的所有元素匹配单个特定的Matcher?

徐星阑
2023-03-14
问题内容

给定一个CollectionIterable项,是否有任何Matcher(或匹配项的组合)断言每个项都匹配一个Matcher

例如,给定此项目类型:

public interface Person {
    public String getGender();
}

我想写一个断言,表示Persons 集合中的所有项目都具有特定gender值。我在想这样的事情:

Iterable<Person> people = ...;
assertThat(people, each(hasProperty("gender", "Male")));

没有each自己写匹配器,有什么办法吗?


问题答案:

使用Every匹配器。

import org.hamcrest.beans.HasPropertyWithValue;
import org.hamcrest.core.Every;
import org.hamcrest.core.Is;
import org.junit.Assert;

Assert.assertThat(people, (Every.everyItem(HasPropertyWithValue.hasProperty("gender", Is.is("male")))));

Hamcrest还提供Matchers#everyItem了一种快捷方式Matcher

完整的例子

@org.junit.Test
public void method() throws Exception {
    Iterable<Person> people = Arrays.asList(new Person(), new Person());
    Assert.assertThat(people, (Every.everyItem(HasPropertyWithValue.hasProperty("gender", Is.is("male")))));
}

public static class Person {
    String gender = "male";

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}


 类似资料:
  • 给定项目的或,是否有任何(或匹配器组合)将断言每个项目都匹配单个? 例如,给定此项目类型: 我想写一个断言,即一个集合中的所有项目都有一个特定的性别值。我在想这样的事情: 有没有办法不用自己编写

  • 问题内容: 检查以下代码段: 这断言该列表没有不以“ x”结尾的元素。当然,这是双重否定的说法,即列表的所有元素均以“ x”结尾。 另请注意,该代码段将引发: 这将列出整个列表,而不只是不以“ x”结尾的元素。 有没有一种惯用的方式: 断言每个元素均以“ x”结尾(没有双负数) 断言错误时,仅列出不以“ x”结尾的那些元素 问题答案: David Harkness提供的匹配器为 预期的部件 产生了

  • 我正试图将Hamcrest匹配器引入到我的团队的一些代码中。为了消除匹配实例集合的复杂性,我想为我的每个匹配器编写一个帮助器方法,我希望匹配的集合。所以本质上,我是在包装容器InAnyOrder。也就是说,如果有人以null作为预期和实际传递,我希望它匹配。但是按照我编写代码的方式,如果为预期传递null,它将抛出一个NullPointerExcION。所以我想返回一个IsNull匹配器,如果nu

  • 问题所在 我目前正在尝试使用Hamcrest匹配器来断言返回的列表类型是特定类型。例如,假设我的服务调用返回了以下列表: null 使用Hamcrest匹配器,是否有一种方法可以断言空列表是某种类型的参数化的(例如)?

  • 本文向大家介绍如何获得包含每个匹配元素集的所有唯一直接子元素的元素集?,包括了如何获得包含每个匹配元素集的所有唯一直接子元素的元素集?的使用技巧和注意事项,需要的朋友参考一下 children([selector])方法获取一组元素,其中包含每个匹配元素集的所有唯一直接子代。 示例 您可以尝试运行以下代码,以了解如何获取包含每个匹配元素集的所有唯一立即子元素的元素集: