引数が空のコレクションでもnullでもないことをチェックするHamcrestマッチャーはありますか?
いつでも使えると思います
both(notNullValue()).and(not(hasSize(0))
しかし、もっと簡単な方法があるのだろうかと思っていたので、それを見逃しました。
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")
の場合、テストは合格です。編集:
次のアプローチが機能していないことに気づきました:
_assertThat(collection, is(not(empty())));
_
Nullについて明示的にテストしたい場合は、考えれば考えるほど、OPによって記述されたステートメントのわずかに変更されたバージョンをお勧めします。
_assertThat(collection, both(not(empty())).and(notNullValue()));
_
コメントに投稿したように、_collection != null
_と_size != 0
_の論理的等価物は_size > 0
_であり、これはコレクションがnullではないことを意味します。 _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
}
}
_
マッチャーを使用できます。
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.anyOf;
assertThat(collection, anyOf(nullValue(), empty()));