アイテムのCollection
またはIterable
が与えられた場合、すべてのアイテムが単一のMatcher
と一致することをアサートするMatcher
(またはマッチャーの組み合わせ)はありますか?
たとえば、次のアイテムタイプがある場合:
public interface Person {
public String getGender();
}
Person
sのコレクション内のすべてのアイテムに特定の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;
}
}
私見これははるかに読みやすいです:
people.forEach(person -> Assert.assertThat(person.getGender()), Is.is("male"));