2015-03-04 12 views
35

Bir Collection veya Iterable öğelerini verildiği zaman, her öğenin tek bir Matcher ile uyumlu olduğunu iddia eden herhangi bir Matcher (veya eşleşme kombinasyonu) var mı? Bu öğe türü Verilen örnek içinKoleksiyonun tüm öğelerini veya yinelenen bir eşleşmeyi tek bir Matcher ile eşleştiren Matcher “Her biri için” bir Hamcrest var mı?

:

public interface Person { 
    public String getGender(); 
} 
Ben Person s'lik bir koleksiyonundaki tüm öğeleri belirli gender değere sahip iddiasıyla yazmak istiyorum

.

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

each kendim eşleştirme aracı yazmadan bunu yapmanın bir yolu var mı: Böyle bir şey düşünüyorum?

+3

Muhtemelen everyItem Matcher kullanabilirsiniz: http://junit.sourceforge.net/javadoc/org/junit/matchers/JUnitMatchers.html –

cevap

50

Every eşleştiricisini kullanın.

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 Ayrıca Matcher bir kısa yol olarak Matchers#everyItem içerir.


için tam bir örnek

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

jenerik gibi görünüyor sorunlara neden oluyor. Bir derleme problemi alıyorum çünkü 'assertThat() 'argüman türleri' T, Matcher ''nü bekler ama IIterable , Matcher > ' –

+0

@ E-Riz’ın tam bir örnekle güncellemesini yaptım. Sizinki farklıysa, lütfen sorunuzu içerecek şekilde düzenleyin. –

+0

Örneğiniz hala jeneriklerle ilgili derleme sorununa sahiptir, ancak sadece JDK 7'ye karşı derlendiğinde; JDK 8 ile iyi derler. Jenerik özelliklerinin 7 ile 8 arasında değiştiğinin farkında değildim ama görünüşe göre derleyicinin aptalca olduğunu ve onu tamir ettiğini fark ettiler. –

İlgili konular