Ian*_*las 142 java collections junit hamcrest
我想知道是否有人知道如何使用assertThat()
和检查列表是否为空Matchers
?
我只能使用JUnit的最佳方式:
assertFalse(list.isEmpty());
Run Code Online (Sandbox Code Playgroud)
但我希望在Hamcrest有一些方法可以做到这一点.
ska*_*man 161
好吧总有
assertThat(list.isEmpty(), is(false));
Run Code Online (Sandbox Code Playgroud)
......但我猜这不是你的意思:)
或者:
assertThat((Collection)list, is(not(empty())));
Run Code Online (Sandbox Code Playgroud)
empty()
在Matchers
课堂上是静态的.请注意,由于Hamcrest 1.2的不稳定的泛型,需要投射list
到Collection
.
以下导入可与hamcrest 1.3一起使用
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.*;
Run Code Online (Sandbox Code Playgroud)
raf*_*mag 75
这在Hamcrest 1.3中得到修复.以下代码编译并不会生成任何警告:
// given
List<String> list = new ArrayList<String>();
// then
assertThat(list, is(not(empty())));
Run Code Online (Sandbox Code Playgroud)
但是如果你必须使用旧版本 - 而不是bug,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)));
Run Code Online (Sandbox Code Playgroud)
上述解决方案最重要的是它不会产生任何警告.如果您想估计最小结果大小,第二种解决方案会更有用.
如果您在读取失败消息之后,可以使用通常的assertEquals和空列表来执行hamcrest:
assertEquals(new ArrayList<>(0), yourList);
Run Code Online (Sandbox Code Playgroud)
例如,如果你跑
assertEquals(new ArrayList<>(0), Arrays.asList("foo", "bar");
Run Code Online (Sandbox Code Playgroud)
你得到
java.lang.AssertionError
Expected :[]
Actual :[foo, bar]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
107457 次 |
最近记录: |