как проверить в assertj, что элементы являются одним из

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

Предположим, у меня есть:

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

Я хочу проверить одно из следующих значений:

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

используя assertj, это может быть что-то вроде:

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

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

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

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

Любая идея?


person ejaenv    schedule 19.12.2015    source источник


Ответы (1)


Вы можете сделать это наоборот:

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);
person Jan X Marek    schedule 19.12.2015
comment
Я согласен, см. joel-costigliola.github.io/assertj/core-8/api/org/assertj/core/ Чего не хватает, так это возможности передать массив / varargs в isSubsetOf, у меня для этого создан источник (github.com/joel-costigliola/assertj-core/ issues / 548) - person Joel Costigliola; 20.12.2015