ewok:
Tengo un método que devolverá una lista de objetos de tipo MyClass
. MyClass
tiene muchas propiedades, pero que me importa type
y count
. Quiero escribir una prueba que afirma que la lista devuelta contiene al menos un elemento que cumpla una determinada condición. Por ejemplo, quiero al menos un elemento en la lista de tipo "Foo"
y el recuento 1
.
Estoy tratando de encontrar la manera de hacer esto sin bucle literalmente en la lista devuelta y la comprobación de cada elemento individual, rompiendo si encuentro uno que pasa, como:
boolean passes = false;
for (MyClass obj:objects){
if (obj.getName() == "Foo" && obj.getCount() == 1){
passes = true;
}
}
assertTrue(passes);
Realmente no me gusta esta estructura. Me pregunto si hay una mejor manera de hacerlo utilizando assertThat
y algunos Matcher.
user2718281:
con las importaciones hamcrest
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
puede probar con
assertThat(foos, hasItem(allOf(
hasProperty("name", is("foo")),
hasProperty("count", is(1))
)));