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

是否有一个Hamcrest"for each"Matcher断言集合或Iterable匹配单个特定Matcher的所有元素?

丘友樵
2023-03-14

给定项目的集合Iterable,是否有任何匹配器(或匹配器组合)将断言每个项目都匹配单个匹配器

例如,给定此项目类型:

public interface Person {
    public String getGender();
}

我想写一个断言,即一个集合中的所有项目都有一个特定的性别值。我在想这样的事情:

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

有没有办法不用自己编写每个匹配器就可以做到这一点?


共有3个答案

裴甫
2023-03-14

比批准的答案更具可读性,循环中没有单独的断言:

import static org.assertj.core.api.Assertions.assertThat;

assertThat(people).allMatch((person) -> {
  return person.gender.equals("male");
});
元昊苍
2023-03-14

IMHO这更具可读性:

people.forEach(person -> Assert.assertThat(person.getGender()), Is.is("male"));
方轩昂
2023-03-14

使用每个匹配器。

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还提供了匹配器#everyItem作为该匹配器的快捷方式。

完整示例

@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;
    }
}

 类似资料:
  • 问题内容: 给定一个或项,是否有任何(或匹配项的组合)断言每个项都匹配一个? 例如,给定此项目类型: 我想写一个断言,表示s 集合中的所有项目都具有特定值。我在想这样的事情: 没有自己写匹配器,有什么办法吗? 问题答案: 使用匹配器。 Hamcrest还提供了一种快捷方式。 完整的例子

  • 我有两个对象集合。这两个集合中的对象是不同类型的,并且有一个自定义匹配器来检查它们是否引用相同的东西。此外,集合的顺序相同。比方说,我们可以按名称比较这些集合中的实体,它们按该名称排序,我们有一个自定义匹配器,如果名称相同,则返回true。 我需要的是一个匹配器,它将逐项迭代这两个集合,并使用现有的自定义匹配器比较这些对(我也可以修改它)。 有人知道怎么做吗? 我的意思是:

  • 我正在寻找一个Hamcrest Matcher到返回java的单元测试方法。util。可选类型。比如: 是否有任何可用的实现抛出Maven存储库?

  • 我想断言ICollection包含满足约束集合的项。对于Java Hamcrest,我将使用匹配器。包含任何订单(匹配器…匹配器)。也就是说,对于给定的集合,集合的每个项都将匹配匹配器中的一个匹配器。 我正努力在nUnit 3中找到一个等价物。有人存在吗?

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

  • 描述 (Description) java.util.regex.Pattern.matcher(CharSequence input)方法创建一个匹配此模式的给定输入的匹配器。 声明 (Declaration) 以下是java.util.regex.Pattern.matcher(CharSequence input)方法的声明。 public Matcher matcher(CharSeque