gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:31:22 27 4
gpt4 key购买 nike

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

例如,给定这个项目类型:

public interface Person {
public String getGender();
}

我想写一个断言,即 Person 集合中的所有项目都具有特定的 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;
}
}

关于java - 是否有一个 Hamcrest "for each"Matcher 断言 Collection 或 Iterable 的所有元素都匹配单个特定的 Matcher?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28860135/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com