Nein, das ist ein Bereich, in dem Hamcrest besser ist als AssertJ.
die folgende Behauptung schreiben:
Set<String> goodTags = newLinkedHashSet("Fine", "Good");
Set<String> badTags = newLinkedHashSet("Bad!", "Awful");
Set<String> tags = newLinkedHashSet("Fine", "Good", "Ok", "?");
// contains is statically imported from ContainsCondition
// anyOf succeeds if one of the conditions is met (logical 'or')
assertThat(tags).has(anyOf(contains(goodTags), contains(badTags)));
Sie diese Bedingung erstellen müssen:
import static org.assertj.core.util.Lists.newArrayList;
import java.util.Collection;
import org.assertj.core.api.Condition;
public class ContainsCondition extends Condition<Iterable<String>> {
private Collection<String> collection;
public ContainsCondition(Iterable<String> values) {
super("contains " + values);
this.collection = newArrayList(values);
}
static ContainsCondition contains(Collection<String> set) {
return new ContainsCondition(set);
}
@Override
public boolean matches(Iterable<String> actual) {
Collection<String> values = newArrayList(actual);
for (String string : collection) {
if (!values.contains(string)) return false;
}
return true;
};
}
Es ist vielleicht nicht das, was Sie, wenn Sie die Anwesenheit Ihrer Tags in einer Sammlung erwarten, dass impliziert Sie sind nicht in dem anderen.
Das ist fast der gleiche Code, den ich verwendet habe. Es ist ein bisschen umständlich. Der "Zustand" ist dem Hamcrest "Matcher" sehr ähnlich; der Unterschied ist, dass Hamcrest mit Dutzenden von ihnen kommt (denn das ist schließlich Hamcrests Konzept). Außerdem sind die Hamcrest-Matcher wirklich sehr vielseitig, sie können für alles verwendet werden und können herumgereicht werden. Das ist der Preis, den Sie für die Code-Vervollständigung bezahlen müssen. Vielleicht wäre es möglich, einen Hamcrest Matcher anstelle eines Zustandes zu verwenden? –
Ich stimme zu, der Code ist umständlich. Ich habe darüber nachgedacht, hamcrest matcher anstelle von Condition wiederzuverwenden, ich bin etwas zurückhaltend, weil es ein anderer Ansatz ist, von dem ich kein großer Fan bin, da ich Schwierigkeiten habe herauszufinden, was der richtige macta ist Ihnen ist es eine gute Lösung. –