在JUnit中断言一个列表不为空

72
我想要断言一个列表在 JUnit 4 中不为空,当我搜索时,我发现了这篇文章:Checking that a List is not empty in Hamcrest,它使用了 Hamcrest。
assertThat(result.isEmpty(), is(false));

导致我出现这个错误:

方法 is(boolean) 在类型 MaintenanceDaoImplTest 中未定义

如何在不使用 Hamcrest 的情况下完成这个操作。


请参见此处:https://dev59.com/xXA65IYBdhLWcg3wyh17 - Florian Schaetz
仅供参考:assertThat(items, IsCollectionWithSize.hasSize(greaterThan(1)))会检查集合的大小。但如果失败,它不会打印集合中的项目 :( - Ilya Serbis
8个回答

126

您可以简单地使用

assertFalse(result.isEmpty());

关于你的问题,它仅仅是因为你忘记了从Hamcrest静态导入is()方法所导致的;

import static org.hamcrest.CoreMatchers.is;

9
更好的方法是使用assertThat(myList, is(not(empty())));来断言。 - Giulio Caccin
@GiulioCaccin 提及导入类会更有帮助。 - t_sologub
我没有提及它,因为LazerBanana的正确答案在这个页面上。https://dev59.com/31sW5IYBdhLWcg3wDzku#51279675 - Giulio Caccin
你如何扩展这个功能以检查文件是否为空? - KLDavenport

42

这段代码写得非常好,并且使用了Hamcrest。正是您所要求的 ;) 当代码像注释一样易于阅读时,总是很好的。

assertThat(myList, is(empty()));
assertThat(myList, is(not(empty())));

你可以将is作为静态导入添加到你的IDE中,因为我知道Eclipse和IntelliJ即使在类路径上也难以建议它。


IntelliJ

Settings -> Code Style -> Java -> Imports 

Eclipse

Prefs -> Java -> Editor -> Content Assist -> Favourites 

而导入本身是 import static org.hamcrest.CoreMatchers.is;


13
empty()这个方法对我来说还没有解决,它也需要用户定义或静态导入吗? - Basheer AL-MOMANI
7
@basheer: 导入静态类 org.hamcrest.Matchers 中的 empty 方法。 - sotix

5
您可以检查列表是否不等于空列表(Collections.EMPTY_LIST),请尝试以下方法:
Assertions.assertNotEquals(Collections.EMPTY_LIST, yourList);

1

assertEquals(Collections.Empty_List,Collections.emptyList())

尝试一下。

1
我喜欢使用。
Assert.assertEquals(List.of(), result)

那样的话,如果列表不为空,您将获得一个非常好的错误消息。例如:
java.lang.AssertionError: 
Expected :[]
Actual   :[something unexpected]

0
在JUnit 5中,我们可以简单而轻松地使用如下的方法。
assertThat(result).isEmpty();

-2
你可以将 "is" 更改为 "equalTo": assertThat(result.isEmpty(), equalTo(false));

你在这个程序中使用了哪些导入?是没有使用 Hamcrest 吗? - Scratte

-2

我也在寻找类似的东西,但最简单的解决方法可能是

Assert.AreEqual(result.Count, 0);

当集合没有记录时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接