检查列表在 Hamcrest 中是否不为空

2022-08-31 07:28:08

我想知道是否有人知道一种方法来检查列表是否为空,使用和?assertThat()Matchers

我可以看到的最好的方式就是使用JUnit:

assertFalse(list.isEmpty());

但我希望在Hamcrest有办法做到这一点。


答案 1

嗯,总是有

assertThat(list.isEmpty(), is(false));

...但我猜这不是你的意思:)

或者:

assertThat((Collection)list, is(not(empty())));

empty()是类中的静态。请注意,由于 Hamcrest 1.2 的不稳定泛型,需要将 转换为 。MatcherslistCollection

以下进口产品可与 hamcrest 1.3 一起使用

import static org.hamcrest.Matchers.empty;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.*;

答案 2

这在Hamcrest 1.3中已修复。下面的代码编译,不生成任何警告:

// given
List<String> list = new ArrayList<String>();
// then
assertThat(list, is(not(empty())));

但是,如果您必须使用旧版本 - 而不是buged,则可以使用:empty()

hasSize(greaterThan(0))
(import static org.hamcrest.number.OrderingComparison.greaterThan;
import static org.hamcrest.Matchers.greaterThan;)

例:

// given
List<String> list = new ArrayList<String>();
// then
assertThat(list, hasSize(greaterThan(0)));

上述解决方案最重要的一点是它不会生成任何警告。如果要估计最小结果大小,则第二种解决方案更有用。