아니요, 이것은 Hamcrest가 AssertJ보다 나은 영역입니다.
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)));
이 조건 만들어야합니다 :
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;
};
}
그것은 당신이 기대하는 경우 하나 개의 컬렉션 태그의 존재가 의미하는 것이 무엇인지되지 않을 수도를
다음과 같은 주장을 작성하려면 그들은 다른 하나에 있지 않습니다.
거의 동일한 코드입니다. 조금 번거 롭습니다. 'Condition'은 Hamcrest'Matcher'와 매우 비슷합니다. 차이점은 Hamcrest에는 수십 가지가 포함되어 있다는 것입니다 (Hamcrest의 개념이기 때문에 결국). 또한, Hamcrest matchers는 실제로 매우 다재 다능한데, 그들은 무엇이든 사용할 수 있으며 통과 할 수 있습니다. 그것이 코드 완성을 위해 지불해야하는 가격입니다. 아마도 조건 대신에 햄크 레스터 일치자를 사용할 수있을 것입니다. –
코드가 번거롭다는 것에 동의합니다. Condition 대신 hamcrest matcher를 재사용하도록 생각하고있었습니다. 다른 접근 방식이기 때문에 약간 마지 못해서, 내가 원하는 것을 찾는 사람이 아니라는 것을 알게되었습니다. 네가 좋은 해결책이야. –