IntelliJ IDEA 2026.1 Help

教程:测试驱动开发

无论您喜欢在编写生产代码之前编写测试,还是喜欢事后再创建测试, IntelliJ IDEA 都能轻松创建并运行单元测试。 在本教程中,您将学习如何使用 IntelliJ IDEA 优先编写测试(测试驱动开发或 TDD)。

创建项目

创建一个新的项目

  1. 启动 IntelliJ IDEA。

    如果打开欢迎屏幕,请点击 新建项目。 否则,请在主菜单中转到 文件 | 新建 | 项目

  2. 在左侧列表中,选择 Java

  3. 请为新项目命名,例如: MoodAnalyser ,并在必要时更改其位置。

  4. 选择 Gradle 作为构建工具,并将 Groovy 作为 DSL。

  5. JDK 列表中选择您想在项目中使用的 JDK

    • 如果已在计算机上安装 JDK,但未在 IDE 中定义,请选择 从磁盘添加 JDK… 并指定 JDK 主目录的路径。​

    • 如果您的计算机上没有必要的 JDK,请选择 下载 JDK

  6. 点击 创建

IntelliJ IDEA 创建了一个具有预配置结构和基本库的项目。 build.gradle 文件中将添加 JUnit 5 作为依赖项。

创建新包

  1. 项目 工具窗口中,右键点击 main | java 文件夹,并选择 新建 | 包

  2. 将新包命名为 com.example.demo ,然后按下 Enter

编写测试主体

创建您的第一个测试

考虑到我们先编写测试,而不一定需要代码已对我们可用,我们将在项目面板中创建第一个测试,并将其放置在一个包中。

  1. 右键点击测试根文件夹 并选择 新建 | Java 类

    在打开的弹出窗口中,为新包和测试类命名: com.example.demo.MoodAnalyserTest

    测试类已创建
  2. 将插入符号置于类的大括号内,按下 Alt+Insert

  3. 请从菜单中选择 测试方法 来根据默认模板创建测试方法。

    将方法命名为 testMoodAnalysis ,按 Enter ,文本光标将停留在方法体内。

    创建您的第一个测试

    您可以更改 默认测试方法模板——例如,若要将方法名称的开头从 test 更改为 should

从测试中新建类

虽然为不存在的类和方法编写测试代码看起来有悖常理,但 IntelliJ IDEA 可以使这一过程变得简单,同时让编译器满意。 IntelliJ IDEA 可以为您创建类和方法,如果它们还不存在的话。

  1. 键入 new MoodAnalyser ,按下 Alt+Enter ,然后选择 创建类"MoodAnalyser"

    从测试中创建新类
  2. 在打开的对话框中,选择 com.example.demo 包位于 main | java 文件夹中,然后点击 OK

    选择目标包

创建变量

和往常一样,您可以使用 IntelliJ IDEA 的 重构工具创建变量来存储结果,同时如果正确的库在类路径中,IntelliJ IDEA 将为您导入最合适的类。

  1. 切换回测试类,将光标放置在 new MoodAnalyser 之后,输入 () 并按 Ctrl+Alt+V 以调用 提取/引入变量 重构。

  2. 将新变量命名为 moodAnalyser

    Tdd extract variable

完成测试主体

继续编写测试主体,包括您需要但不存在的方法名称。

  1. 在测试类中,输入以下语句:

    moodAnalyser.analyseMood("This is a sad message");

    analyseMood 将被标记为未解析的引用。

  2. 请将文本光标放在 analyseMood ,按 Alt+Enter ,然后点击 在 'MoodAnalyser' 中创建方法 'analyseMood'

    Ij tdd create method
  3. 请确保 MoodAnalyser 类如下所示:

    public class MoodAnalyser { public String analyseMood(String message) { return null; } }
    编写测试主体
  4. 在测试类中,将文本光标置于 analyseMood ,按 Ctrl+Alt+V ,并输入 mood

    引入变量 'mood'

添加一个断言语句

  1. 打开 build.gradle 文件,添加以下依赖项并点击 同步 Gradle 更改 以导入更改:

    dependencies { testImplementation( 'org.hamcrest:hamcrest-library:2.2' ) }
  2. MoodAnalyserTest 中,添加以下语句:

    assertThat(mood, CoreMatchers.is("SAD"));

    Alt+Enter 导入缺失的方法和类。

代码

至此,您的测试类和生成类应如下所示:

package com.example.demo; public class MoodAnalyser { public String analyseMood(String message) { return null; } }
package com.example.demo; import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.Test; import static org.hamcrest.MatcherAssert.assertThat; public class MoodAnalyserTest { @Test void testMoodAnalysis() { MoodAnalyser moodAnalyser = new MoodAnalyser(); String mood = moodAnalyser.analyseMood("This is a sad message"); assertThat(mood, CoreMatchers.is("SAD")); } }

运行测试

遵循 TDD 方法时,通常会经历一个 红—绿—重构 循环。 您将运行一次测试,看到其失败(变为红色),实现最简单的代码以使测试通过(变为绿色),然后重构代码,使您的测试保持绿色,且代码足够干净。

此循环的第一步是运行测试并看到其失败。

鉴于我们已使用 IntelliJ IDEA 的功能为正在测试的方法创建了最简单的空实现,我们并不指望测试会通过。

  • 在测试中,按下 Ctrl+Shift+F10 以运行此单个测试。

    结果将显示在 运行工具窗口 中。 测试名称旁将有一个图标——红色表示异常,黄色表示断言失败。 对于任意一种失败,还会显示说明出错原因的消息。

    运行测试

实现代码

下一步是让测试通过,这意味着实现最简单可行的内容。 在 TDD 中,最简单可行的内容往往可能是将期望值硬编码。 稍后我们将看到,如何通过迭代此过程来得到更贴近实际的生产代码。

修复测试

  1. MoodAnalyser 中,用 null 替换 SAD 返回值: return "SAD";

  2. 重新运行测试,使用 Shift+F10 重新运行上次测试。

    请查看测试通过情况——测试方法旁边的图标应变为绿色。

    重新运行测试

迭代

开发代码是一个迭代过程。 在遵循 TDD 风格的方法时,这一点更是如此。 为了推动更复杂的行为,我们为其他情况添加测试。

添加第二个测试用例

  1. 在您的测试类中,再次使用 Alt+Insert 创建一个新的测试方法。 请命名为 HappyMoods

  2. 将以下代码添加到您的类中。

    @Test void HappyMoods() { MoodAnalyser moodAnalyser = new MoodAnalyser(); String mood = moodAnalyser.analyseMood("This is a happy message"); assertThat(mood, CoreMatchers.is("HAPPY")); }
    添加第二个测试
  3. 通过按 Alt+Shift+R 运行此第二个测试用例,您将看到它失败。

    添加第二个测试

修复第二个测试

  1. 更改正在测试的方法中的代码以使此测试通过:

    package com.example.demo; public class MoodAnalyser { public String analyseMood(String message) { if (message.contains(("sad"))) { return "SAD"; } else { return "HAPPY"; } } }
  2. 通过按下 Ctrl+Shift+F10 在测试类中重新运行这两个测试,而不是在单个方法中,并查看现在两个测试都通过。

    第二个测试通过

总结

首次以测试优先的方式编写测试需要进行一些设置——创建测试类、创建测试方法,然后创建最终将成为生产代码的代码的空实现。 IntelliJ IDEA 自动化了很多初始设置。

随着您在此流程中不断迭代,先创建测试,再进行使这些测试通过所需的更改,您将为所需的功能构建起一套完整的测试套件,以及能够满足这些需求的最简单解决方案。

2026年 3月 24日