我想知道是否有人知道使用assertThat()
和Matchers
检查列表是否为空的方法
我所能看到的最好的方式就是使用JUnit:
assertFalse(list.isEmpty());
但我希望在Hamcrest有办法做到这一点。
发布于 2010-09-03 04:47:26
好吧,总会有的
assertThat(list.isEmpty(), is(false));
..。但我猜这并不完全是您的意思:)
或者:
assertThat((Collection)list, is(not(empty())));
empty()
是Matchers
类中的静态变量。注意需要将list
转换为Collection
,这要归功于Hamcrest 1.2的不可靠的泛型。
以下导入可与hamcrest 1.3一起使用
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.*;
发布于 2012-01-17 20:02:54
在Hamcrest 1.3中已修复此问题。下面的代码编译后不会生成任何警告:
// given
List<String> list = new ArrayList<String>();
// then
assertThat(list, is(not(empty())));
但是如果你必须使用旧版本--而不是错误的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)));
上述解决方案最重要的一点是,它不会生成任何警告。如果您想要估计最小结果大小,那么第二个解决方案更有用。
发布于 2013-11-23 10:26:56
如果你正在寻找可读的失败消息,你可以不使用hamcrest,只需使用带有空列表的常用assertEquals:
assertEquals(new ArrayList<>(0), yourList);
例如,如果你运行
assertEquals(new ArrayList<>(0), Arrays.asList("foo", "bar");
你会得到
java.lang.AssertionError
Expected :[]
Actual :[foo, bar]
https://stackoverflow.com/questions/3631110
复制相似问题