Is there a Hamcrest matcher which checks that the argument is neither an empty Collection nor null?
I guess I could always use
both(notNullValue()).and(not(hasSize(0))
but I was wondering whether there is a simpler way and I missed it.
Is there a Hamcrest matcher which checks that the argument is neither an empty Collection nor null?
I guess I could always use
both(notNullValue()).and(not(hasSize(0))
but I was wondering whether there is a simpler way and I missed it.
You can combine the IsCollectionWithSize
and the OrderingComparison
matcher:
@Test
public void test() throws Exception {
Collection<String> collection = ...;
assertThat(collection, hasSize(greaterThan(0)));
}
For collection = null
you get
java.lang.AssertionError:
Expected: a collection with size a value greater than <0>
but: was null
For collection = Collections.emptyList()
you get
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")
the test passes.Edit:
Just noticed that the following approch is not working:
assertThat(collection, is(not(empty())));
The more i think about it the more i would recommend a slightly altered version of the statement written by the OP if you want to test explicitly for null.
assertThat(collection, both(not(empty())).and(notNullValue()));
hasSize(greaterThan(0))
and both(not(empty())).and(notNullValue())
are a good way. –
Border 1 expectation failed. JSON path images doesn't match. Expected: (an empty collection or null) Actual: null
when i try to check for empty collection or null with your code : myResponse.body(myArrayAttr, either(empty()).or(nullValue()));
–
Roshan As I posted in the comments, the logical equivalent of collection != null
and size != 0
is
size > 0
, that implies the collection is not null. A simpler way to express size > 0
is there is an (arbitrary) element X in collection
. Below a working code example.
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
}
}
You are welcome to use Matchers:
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.anyOf;
assertThat(collection, anyOf(nullValue(), empty()));
© 2022 - 2024 — McMap. All rights reserved.
size >= 0
, if the API supports such calls. – EppassertThat( metadata, either( is( empty() ) ).or( is( nullValue() ) ) );
– DefrostassertTrue(CollectionUtils.isNotEmpty(collectioin))
.CollectionUtils
is an Apache Commons Lang class. – Defective