Есть ли совпадение Hamcrest, чтобы проверить, что коллекция не является ни пустой, ни нулевой?
Есть ли счетчик Hamcrest, который проверяет, что аргумент не является ни пустой, ни пустой?
Думаю, я всегда мог использовать
both(notNullValue()).and(not(hasSize(0))
но мне было интересно, есть ли более простой способ, и я пропустил его.
Ответы
Ответ 1
Вы можете комбинировать IsCollectionWithSize
и OrderingComparison
:
@Test
public void test() throws Exception {
Collection<String> collection = ...;
assertThat(collection, hasSize(greaterThan(0)));
}
-
Для collection = null
вы получаете
java.lang.AssertionError:
Expected: a collection with size a value greater than <0>
but: was null
-
Для collection = Collections.emptyList()
вы получаете
java.lang.AssertionError:
Expected: a collection with size a value greater than <0>
but: collection size <0> was equal to <0>
- Для
collection = Collections.singletonList("Hello world")
тест проходит.
Edit:
Только что заметил, что следующий запрос не работает:
assertThat(collection, is(not(empty())));
Чем больше я думаю об этом, тем больше я бы рекомендовал слегка измененную версию инструкции, написанной OP, если вы хотите явно проверить значение null.
assertThat(collection, both(not(empty())).and(notNullValue()));
Ответ 2
Как я писал в комментариях, логический эквивалент collection != null
и size != 0
size > 0
, что означает, что коллекция не является нулевой. Более простой способ выразить size > 0
равен there is an (arbitrary) element X in collection
. Ниже примера рабочего кода.
import static org.hamcrest.core.IsCollectionContaining.hasItem;
import static org.hamcrest.CoreMatchers.anything;
public class Main {
public static void main(String[] args) {
boolean result = hasItem(anything()).matches(null);
System.out.println(result); // false for null
result = hasItem(anything()).matches(Arrays.asList());
System.out.println(result); // false for empty
result = hasItem(anything()).matches(Arrays.asList(1, 2));
System.out.println(result); // true for (non-null and) non-empty
}
}
Ответ 3
Вы можете использовать Hamcrest:
import static org.hamcrest.MatcherAssert.assertThat;
assertThat(collection, anyOf(nullValue(), empty()));