Affirmer que la valeur réelle est dans une collection de valeurs attendues possibles
Existe-t-il un moyen d'affirmer qu'une valeur réelle est égale à l'une d'un certain nombre de valeurs ?
Exemple :
String original = "..."; Collection<String> permittedTransformations = Set.of("...[1]", "...[2]", "...[3]"); String actual = transform(original); assertThat(actual, isContainedIn(permittedTransformations));
Je peux voir que je peux simplement échanger les arguments :
assertThat(permittedTransformations, contains(actual));
mais cela inverse la sémantique. Je ne vérifie pas si permittedTransformations
est correct; Je vérifie actual
.
Répondre
Vous pouvez mapper les éléments de l'ensemble sur des Matcher<String>
individuels objets, et combinez-les avec either
:
import static java.util.stream.Collectors.reducing; import static org.hamcrest.CoreMatchers.either; import static org.hamcrest.CoreMatchers.is; Collection<String> permittedTransformations = Set.of("...[1]", "...[2]", "...[3]"); Optional<Matcher<String>> matcher = permittedTransformations.stream() .map(s -> is(s)) .collect(reducing((m1, m2) -> either(m1).or(m2))); assertThat(actual, matcher.get());