IT이야기

Collection 또는 Iterable의 모든 요소가 단일 특정 Matcher와 일치한다고 주장하는 Hamcrest "for each" Matcher가 있을까

cyworld 2021. 10. 7. 21:05
반응형

Collection 또는 Iterable의 모든 요소가 단일 특정 Matcher와 일치한다고 주장하는 Hamcrest "for each" Matcher가 있습니까?


Collection또는 Iterableof 항목이 주어졌을 때 Matcher모든 항목이 단일 항목과 일치한다고 주장하는 일치자 조합(또는 일치자 조합)이 Matcher있습니까?

예를 들어, 다음 항목 유형이 주어지면:

public interface Person {
    public String getGender();
}

Persons 컬렉션의 모든 항목에 특정 gender있다는 주장을 작성하고 싶습니다 . 나는 다음과 같이 생각하고 있다.

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

eachMatcher를 직접 작성하지 않고 이를 수행할 수 있는 방법이 있습니까?


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

IMHO 이것은 훨씬 더 읽기 쉽습니다.

people.forEach(person -> Assert.assertThat(person.getGender()), Is.is("male"));

ReferenceURL : https://stackoverflow.com/questions/28860135/is-there-a-hamcrest-for-each-matcher-that-asserts-all-elements-of-a-collection

반응형