2017-08-25 5 views
2

Ich habe eine Java Custom Object Sammlung List<Employee> mit zwei (2) Eigenschaften. Es wird als Antwort des Web Service empfangen. Das Objekt scheint wieHamcrest Pattern Assert 2 Eigenschaften der benutzerdefinierten Sammlung

public class Employee{ 
    public String getName(){ ... } 
    public String getDesignation(){ ... } 
} 

ich eine Behauptung schreiben müssen zu überprüfen, ob der Name des Mitarbeiters ist David dann seine Bezeichnung -Manager sein muss. Ich habe versucht, es so, dass

assertThat(employeeList, allOf(hasItem(hasProperty("name", equalTo("David"))) , hasItem(hasProperty("designation", equalTo("Manager")))));

aber es bestanden, wenn mindestens eine Manager-Instanz und ein David ist. Meine Anforderung besteht darin, diese beiden Prüfungen auf eine einzige Instanz anzuwenden.

Bitte helfen.

Antwort

1

Foo eine Klasse Gegeben:

public class Foo { 
    private String name; 
    private String designation; 

    public Foo(String name, String designation) { 
     this.name = name; 
     this.designation = designation; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getDesignation() { 
     return designation; 
    } 

    public void setDesignation(String designation) { 
     this.designation = designation; 
    } 
} 

Und eine benutzerdefinierte hamcrest Matcher:

private static class FooMatcher extends BaseMatcher<List<Foo>> { 
    public String name; 
    public String designation; 

    public static FooMatcher matches(String name, String designation) { 
     return new FooMatcher(name, designation); 
    } 

    private FooMatcher(String name, String designation) { 
     this.name = name; 
     this.designation = designation; 
    } 

    @Override 
    public boolean matches(Object item) { 
     Foo foo = (Foo) item; 
     return foo.getName().equals(name) && foo.getDesignation().equals(designation); 
    } 

    @Override 
    public void describeTo(Description description) { 
     // this is a quick impl, you'll probably want to fill this in! 
    } 
} 

Dieser Test bestehen wird:

@Test 
public void canAssertOnMultipleFooAttributes() { 
    List<Foo> incoming = Lists.newArrayList(new Foo("bill", "sir"), new Foo("bob", "mr"), new Foo("joe", "mr")); 
    assertThat(incoming, hasItem(FooMatcher.matches("bob", "mr"))); 
} 
Verwandte Themen