如何断言String不为空

Arm*_*ine 26 java junit unit-testing hamcrest

断言jun中的a string不是空的,可以通过以下方式完成:

 assertTrue(!string.isEmpty());
 assertFalse(string.isEmpty());
 assertThat(string.toCharArray(), is(not(emptyArray())); // (although this didn't compile)
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有更好的方法来检查这个 - 比如:

assertThat(string, is(not(empty()))

hol*_*ava 48

在hamcrest 1.3中,您可以使用Matchers#isEmptyString:

assertThat(string, not(isEmptyString()));
Run Code Online (Sandbox Code Playgroud)

在hamcrest 2.0中,您可以使用Matchers#emptyString:

assertThat(string, is(not(emptyString())));
Run Code Online (Sandbox Code Playgroud)

更新 - 请注意:"Maven central有一些名为java-hamcrest和hamcrest-java的额外工件,版本为2.0.0.0.请不要使用这些工件,因为它们是重新包装不同罐子的中断工作." 来源:hamcrest.org/JavaHamcrest/distributables

  • 很好的答案,但请注意,当 String 为 null 时,语句返回 true。根据您的规范,您可能需要将 CoreMatchers.notNullValue() 添加到测试中。 (3认同)
  • @StevenKuypers 是的,先生。但问题是检查 String 是否为空而不是 null 或空。为此,有相关的匹配器,例如:1.3 中的“isEmptyOrNullString()”或 2.0 中的“emptyOrNullString()”。 (2认同)

Tom*_*wor 11

您还可以使用名为AssertJ的库,它为您的代码提供了出色的流畅断言。检查可以用优雅的方式完成:

assertThat(myString).isNotEmpty();


Ste*_*ner 5

您可以使用JUnit自己的assertNotEquals断言:

Assert.assertNotEquals( "", string );
Run Code Online (Sandbox Code Playgroud)