Java >> Tutoriel Java >  >> Tag >> assert

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());

Balise Java