1. 概述

在某些场景下,我们需要验证一个 String 是否为空。Java 中有多种方式可以实现这类断言。

本篇将带你快速了解几种常见的字符串非空断言方法。

2. Maven 依赖

我们先引入几个必要的依赖。在 Maven 项目中,可以在 pom.xml 中添加以下依赖:

JUnit:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

Hamcrest Core:

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-core</artifactId>
    <version>1.3</version>
</dependency>

Apache Commons Lang:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

AssertJ:

<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>3.11.1</version>
</dependency>

Google Guava:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

3. 使用 JUnit

我们可以使用 String 类的 isEmpty 方法配合 JUnit 的 Assert 类来判断字符串是否非空。

因为 isEmpty() 方法在字符串为空时返回 true,所以我们可以这样写:

assertFalse(text.isEmpty());

或者这样:

assertTrue(!text.isEmpty());

⚠️ 但如果 textnull,上面的写法会抛出 NullPointerException。所以更稳妥的方式是使用 assertNotEquals

assertNotEquals("", text);

或者:

assertNotSame("", text);

这些断言失败时都会抛出 AssertionError

4. 使用 Hamcrest Core

Hamcrest 是一个广泛使用的断言框架,常用于 Java 单元测试。

我们可以使用 Hamcrest 的 CoreMatchers 类来判断字符串是否非空:

assertThat(text, CoreMatchers.not(isEmptyString()));

其中 isEmptyString() 方法来自 IsEmptyString 类。

如果断言失败,会输出更友好的错误信息:

java.lang.AssertionError: 
Expected: not an empty string
     but: was ""

如果需要同时判断字符串既不为 null 也不为空,可以使用:

assertThat(text, CoreMatchers.not(isEmptyOrNullString()));

更多关于 CoreMatchers 的内容可以参考 这篇文章

5. 使用 Apache Commons Lang

Apache Commons Lang 提供了大量对 java.lang API 的增强工具类。

我们可以使用 StringUtils 类来判断字符串是否非空:

assertTrue(StringUtils.isNotBlank(text));

如果断言失败,会抛出普通的 AssertionError

更多关于 Apache Commons Lang 字符串处理的内容可以参考 这篇文章

6. 使用 AssertJ

AssertJ 是一个开源、社区驱动的断言库,支持编写流畅、丰富的断言语句。

使用 AbstractCharSequenceAssert.isNotEmpty() 方法可以判断一个 CharSequence 是否非空:

Assertions.assertThat(text).isNotEmpty();

断言失败时会输出:

java.lang.AssertionError: 
Expecting actual not to be empty

关于 AssertJ 的入门介绍可以参考 这篇文章

7. 使用 Google Guava

Guava 是 Google 提供的一套核心库。

我们可以使用 Guava 中 Strings 类的 isNullOrEmpty 方法来判断字符串是否为空或 null

assertFalse(Strings.isNullOrEmpty(text));

断言失败时也会抛出 AssertionError,但不会有额外的错误信息。

更多关于 Guava 的内容可以参考 这里

8. 总结

本文介绍了多种在 Java 中判断字符串是否非空的方法,包括:

✅ JUnit 原生断言
✅ Hamcrest 匹配器
✅ Apache Commons Lang 工具类
✅ AssertJ 流畅断言
✅ Google Guava 的辅助方法

每种方式都有其适用场景,根据项目依赖和风格选择即可。

完整代码示例可以在 GitHub 上找到。


原始标题:String Not Empty Test Assertions in Java