2015-12-19 3 views
2

я не могу найти, как сделать проверку с assertj следующее (что очень часто):как проверить в assertj, что элементы являются одним из

Пусть у меня есть:

result1 = {"AAA", "BBB"} 
result2 = {"DDD"} 

Я хочу проверить значения в результате один из них:

String[] valid = String[]{"AAA", "BBB", "CCC"}; 

использованием assertj, whould быть что-то как:

assertThat(result1).xxxx(valid); 
assertThat(result2).xxxx(valid); 

Так что результат1 пройдет проверку, но результат2 не будет.

содержит() не работает (он проверяет, что результат содержит все допустимые элементы)

Я не хочу иметь, чтобы создать пользовательское условие для такого рода проверки

Любая идея?

ответ

3

Вы можете wtite это наоборот:

assertThat(valid).contains(result1); 
assertThat(valid).contains(result2); 

Если вы настаиваете на том, результат слева и действующий с правой стороны, вы можете использовать:

assertThat(result1).isSubsetOf(Arrays.asList(valid)); 
assertThat(result2).isSubsetOf(Arrays.asList(valid)); 

Или, почему бы не определить действительный как набор, а не массив?

Set<String> valid = Sets.newHashSet("AAA", "BBB", "CCC"); //Sets comes from google guava 
assertThat(result1).isSubsetOf(valid); 
assertThat(result2).isSubsetOf(valid); 
+1

Я согласен см http://joel-costigliola.github.io/assertj/core-8/api/org/assertj/core/api/AbstractIterableAssert.html#isSubsetOf-java.lang.Iterable- Отсутствует возможность передать массив/varargs в isSubsetOf, я создал для этого insusue (https://github.com/joel-costigliola/assertj-core/issues/548) –

+0

отличный ответ, спасибо – ejaenv