AssertJ for Java: 完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

AssertJ for Java: Fluent Assertions 完整指南

\n\n

1. 什么是 AssertJ 以及为什么需要它

\n\n

AssertJ 是一个强大的 Java 语言 fluent-assertions(流畅断言)库,旨在编写可读、表达力强且自文档化的测试。与提供诸如 assertEquals(a, b) 等基本方法的标准 JUnit 或 TestNG 不同,AssertJ 提供了丰富的 API,支持方法链式调用,使测试代码看起来像自然语言。例如,您不再编写 assertTrue(list.contains("foo")),而是编写 assertThat(list).contains("foo")。

\n\n

为什么需要它?首先,AssertJ 显著提高了测试的可读性。当开发人员看到 assertThat(result).isNotNull().hasSize(5).contains("expected") 时,他们立即明白正在检查什么:结果不为 null,大小为 5,并且包含字符串 "expected"。其次,AssertJ 提供详细的错误消息。您将不再看到枯燥的 "expected true but was false",而是会得到 "Expected list to contain 'foo' but could not find it in [bar, baz]"。第三,该库支持多种数据类型:集合、字符串、数字、日期、文件、异常甚至自定义对象。

\n\n

AssertJ 在那些测试基础维护至关重要的项目中特别有用。得益于流畅的 API,测试在重构时变得不那么脆弱,因为方法链易于修改。该库正在积极开发,拥有出色的文档,并在业界广泛使用(Spring、Hibernate、Netflix 等)。

\n\n

2. 安装

\n\n

AssertJ 通过 Maven Central 分发。要在项目中使用,请将依赖项添加到您的 pom.xml(Maven)或 build.gradle(Gradle)中。

\n\n

Maven

\n
<dependency>\n    <groupId>org.assertj</groupId>\n    <artifactId>assertj-core</artifactId>\n    <version>3.25.3</version> <!-- 请在 Maven Central 上查看最新版本 -->\n    <scope>test</scope>\n</dependency>\n
\n\n

Gradle

\n
testImplementation 'org.assertj:assertj-core:3.25.3'\n
\n\n

如果您使用 JUnit 5,则无需额外依赖。对于 JUnit 4,AssertJ 也能正常工作。请确保 AssertJ 版本与您的 Java 版本兼容(3.x 需要 Java 8 或更高版本)。

\n\n

3. 快速入门 — 最小工作示例

\n\n

添加依赖项后,您可以立即开始使用 AssertJ。主要方法是 assertThat(),它接受一个对象并返回相应的断言对象。

\n\n
import static org.assertj.core.api.Assertions.assertThat;\n\nimport org.junit.jupiter.api.Test;\n\npublic class QuickStartTest {\n\n    @Test\n    void testSimpleAssertion() {\n        String name = "AssertJ";\n        \n        // 基本断言\n        assertThat(name)\n            .isNotNull()\n            .isNotEmpty()\n            .startsWith("Ass")\n            .endsWith("J")\n            .hasSize(7);\n        \n        // 数字检查\n        int number = 42;\n        assertThat(number)\n            .isPositive()\n            .isGreaterThan(40)\n            .isLessThan(50);\n        \n        // 集合检查\n        var list = java.util.List.of("a", "b", "c");\n        assertThat(list)\n            .hasSize(3)\n            .contains("a", "b")\n            .doesNotContain("z");\n    }\n}\n
\n\n

这个示例展示了关键思想:方法链,每个方法返回相同的断言对象,允许编写连续的检查。如果任何断言失败,测试将失败并显示清晰的错误消息。

\n\n

4. 主要方法/函数/类

\n\n

AssertJ 提供了数百种方法。以下是 8 个最常用的方法及其签名

推荐