# 教程：使用 Kotlin 进行测试驱动开发

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com/zh-cn/help/idea/llms.txt).

> **TL;DR**
> 必需插件：   Kotlin  （捆绑）

无论您喜欢在编写生产代码之前编写测试，还是喜欢事后再创建测试， IntelliJ IDEA 都能轻松创建并运行单元测试。 在本教程中，您将学习如何使用 IntelliJ IDEA 优先编写测试（ [测试驱动开发或 TDD](http://martinfowler.com/bliki/TestDrivenDevelopment.html)）。 请参阅 [Kotlin 文档](https://kotlinlang.org/docs/jvm-test-using-junit.html)了解详情。

Procedure: 创建新项目

1. 启动 IntelliJ IDEA。

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

2. 在左侧列表中，选择   Kotlin  。 将新项目命名为  `TDD-in-Kotlin` ，如有必要，可以更改其位置。

3. 选择   Gradle   作为构建工具，并将   Kotlin   作为 DSL。

4. 从    JDK    列表中选择您想在项目中使用的 [JDK](sdk.html#jdk)。

* 如果已在计算机上安装 JDK，但未在 IDE 中定义，请选择 ![](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.nodes.jdk.png) 从磁盘添加 JDK… 并指定 JDK 主目录的路径。​

* 如果您的计算机上没有必要的 JDK，请选择 ![](https://resources.jetbrains.com/help/img/idea/2026.3/app-client.expui.general.download.svg) 下载 JDK 。

> **Tip:**
> 如果您不知道选择哪个发行版，并且没有具体要求使用现有的某个发行版，请使用 Oracle OpenJDK。

有关 JDK 及其安装的更多信息，请参阅 [Java 开发工具包 (JDK) 指南](sdk.html#jdk)。

5. 点击   创建  。

IntelliJ IDEA 创建了一个具有预配置结构和基本库的项目。

Procedure: 创建新包

1. 在   项目   工具窗口中，右键点击  `main | kotlin`  文件夹，并选择  `新建 | 包` 。

2. 将新包命名为  `com.example.demo` ，然后按下 `Enter` (Windows), `⏎` (macOS), `⏎` (IntelliJ IDEA Classic (macOS)), `⏎` (macOS System Shortcuts), `Enter` (XWin), `Enter` (GNOME), `Enter` (KDE), `Enter` (Emacs), `Enter` (Sublime Text), `⏎` (Sublime Text (macOS)), `Enter` (Visual Studio), `⏎` (Visual Studio (macOS)), `Enter` (NetBeans), `Enter` (Eclipse), `⏎` (Eclipse (macOS))。

## 编写测试主体

Procedure: 创建您的第一个测试

鉴于我们在没有可供测试的代码的情况下先编写测试，我们将通过项目面板创建第一个测试。

1. 右键点击测试根文件夹 ![](https://resources.jetbrains.com/help/img/idea/2026.3/app-client.expui.nodes.testRoot.svg)并选择  `新建 | Kotlin 类/文件` 。

在打开的弹出窗口中，为新包和测试类命名：  `com.example.demo.CalculatorTest` 。

![测试类已创建](https://resources.jetbrains.com/help/img/idea/2026.3/ij_tdd_create_test_kotlin.png)

2. 将插入符号置于类的大括号内，按下 `Alt+Insert` (Windows), `⌘ N` (macOS), `⌃ N` (IntelliJ IDEA Classic (macOS)), `⌘ N` (macOS System Shortcuts), `Alt+Insert` (XWin), `Alt+Insert` (GNOME), `Alt+Insert` (KDE), `Alt+Insert` (Emacs), `Alt+Insert` (Sublime Text), `⌘ N` (Sublime Text (macOS)), `Alt+Insert` (Visual Studio), `⌘ ⌃ N` (Visual Studio (macOS)), `Alt+Insert` (NetBeans), `Alt+Insert` (Eclipse), `⌘ N` (Eclipse (macOS))。

3. 请从菜单中选择   测试功能  以从默认模板创建一个测试函数。 选择 JUnit 5 作为测试框架。

命名函数  `testMultiplyBy2` ，按下 `Enter` (Windows), `⏎` (macOS), `⏎` (IntelliJ IDEA Classic (macOS)), `⏎` (macOS System Shortcuts), `Enter` (XWin), `Enter` (GNOME), `Enter` (KDE), `Enter` (Emacs), `Enter` (Sublime Text), `⏎` (Sublime Text (macOS)), `Enter` (Visual Studio), `⏎` (Visual Studio (macOS)), `Enter` (NetBeans), `Enter` (Eclipse), `⏎` (Eclipse (macOS))，光标将定位到函数体内。

![创建您的第一个测试](https://resources.jetbrains.com/help/img/idea/2026.3/generate-method-kotlin.png)

您可以更改 [默认测试函数模板](using-file-and-code-templates.html)——例如，如果您希望将函数名称的开头从  `test`  更改为  `should` 。

Procedure: 编写测试主体

看起来为不存在的类和函数编写测试代码有点反直觉，但是 IntelliJ IDEA 使这一过程变得简单，同时保持编译器满意。 IntelliJ IDEA 可以为您创建类和函数（如果它们尚不存在的话）。

编写您的测试，描述您想要实现的目标，在任何不存在的类上按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS)) 并选择   创建类  。 这将为您提供一个让编译器满意的最小实现。

1. 键入  `val calculator = Calculator()` ，按下 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))，然后选择   创建类 'Calculator'  。

![创建新类](https://resources.jetbrains.com/help/img/idea/2026.3/create-new-class-kotlin.png)

2. 从   选择类容器  中选择   提取到单独文件  。 在打开的对话框中，选择我们 [先前创建](#create-package)  `main` 中的  `com.example.demo` 包。

3. 继续编写测试主体，包括您需要但不存在的函数名称。

输入  `val result = calculator.parse("2 * 2")`  并按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))。 选择   创建成员函数  以让 IntelliJ IDEA 创建一个基本的脚本函数。

![创建函数](https://resources.jetbrains.com/help/img/idea/2026.3/create-function-via-intention.png)

4. 实现经过测试的函数，以便返回所需类型并且可以无误编译。 现在结果的正确性并不重要。

![在被测试的类中实现该函数](https://resources.jetbrains.com/help/img/idea/2026.3/implement_function.png)

5. 在测试函数中添加一个断言。 此语句将比较函数的实际返回值与预期返回值，从而确定测试的结果。 输入  `assertEquals(4, result)`

如果函数未自动导入，请将文本光标置于  `assertEquals` ，按下 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))，选择   导入功能  ，然后选择  `org.jetbrains.kotlin:kotlin-test` 。

![assertEquals() 用于检查参数是否相等，如果不相等则测试失败](https://resources.jetbrains.com/help/img/idea/2026.3/add-assertion.png)

## 运行测试

遵循 TDD 方法时，通常会经历一个 [红—绿—重构](https://martinfowler.com/articles/workflowsOfRefactoring/#tdd) 循环。 您将运行一次测试，看到其失败（变为红色），实现最简单的代码以使测试通过（变为绿色），然后重构代码，使您的测试保持绿色，且代码足够干净。

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

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

Procedure:

* 在测试中，按下 `Ctrl+Shift+F10` (Windows), `⌃ ⇧ R` (macOS), `⌃ ⇧ F10` (IntelliJ IDEA Classic (macOS)), `⌃ ⇧ R` (macOS System Shortcuts), `Ctrl+Shift+F10` (XWin), `Ctrl+Shift+F10` (GNOME), `Ctrl+Shift+F10` (KDE), `Ctrl+Shift+F10` (Emacs), `Ctrl+Shift+F10` (Sublime Text), `Ctrl+Shift+F10` (Sublime Text (macOS)), `Ctrl+Alt+F5` (Visual Studio), `⌃ ⌥ F5` (Visual Studio (macOS)), `Alt+Shift+F6` (NetBeans), `Ctrl+Shift+F10` (Eclipse), `⌃ ⇧ R` (Eclipse (macOS)) 以运行此单个测试。

结果将显示在 [运行对话框](viewing-and-exploring-test-results.html)中。 测试名称旁边会有一个图标 — 异常显示为红色，断言失败显示为黄色。 对于任意一种失败，还会显示说明出错原因的消息。

![运行测试](https://resources.jetbrains.com/help/img/idea/2026.3/ij_tdd_run_failing_tests_kotlin.png)

Procedure: 实现代码

下一步是让测试通过，这意味着实现最简单可行的内容。

1. 您可以使用常规功能导航到正在测试的代码——点击函数名称、在文本光标位于函数名称上时按 `Ctrl+Alt+B` (Windows), `⌘ ⌥ B` (macOS), `⌘ ⌥ B` (IntelliJ IDEA Classic (macOS)), `⌘ ⌥ B` (macOS System Shortcuts), `Ctrl+Alt+B` (XWin), `Ctrl+Alt+B` (GNOME), `Ctrl+Alt+B` (KDE), `Ctrl+Alt+B` (Emacs), `Ctrl+Alt+B` (Sublime Text), `⌘ ⌥ B` (Sublime Text (macOS)), `Alt+End` (Visual Studio), `⌘ ⌥ Click` (Visual Studio (macOS)), `Ctrl+Alt+B` (NetBeans), `Ctrl+T` (Eclipse), `Ctrl+Alt+B` (Eclipse (macOS))，或按 `Ctrl+Shift+T` (Windows), `⌘ ⇧ T` (macOS), `⌘ ⇧ T` (IntelliJ IDEA Classic (macOS)), `⌃ ⇧ T` (macOS System Shortcuts), `Ctrl+Shift+T` (XWin), `Ctrl+Shift+T` (GNOME), `Ctrl+Shift+T` (KDE), `Ctrl+Shift+T` (Emacs), `Ctrl+Shift+T` (Sublime Text), `Ctrl+Shift+T` (Sublime Text (macOS)), `Ctrl+Shift+T` (Visual Studio), `Ctrl+Shift+T` (Visual Studio (macOS)), `Ctrl+Shift+T` (NetBeans), `Ctrl+Shift+T` (Eclipse), `Ctrl+Shift+T` (Eclipse (macOS)) 在测试代码和生产代码之间切换。

2. 对函数进行修改以使测试通过。 在 TDD 中，最简单可行的内容往往可能是将期望值硬编码。 稍后我们将看到，如何通过迭代此过程来得到更贴近实际的生产代码。

![修复方法的代码以满足测试条件](https://resources.jetbrains.com/help/img/idea/2026.3/implement-code-kotlin.png)

3. 请使用 `Shift+F10` (Windows), `⌃ R` (macOS), `⇧ F10` (IntelliJ IDEA Classic (macOS)), `⌥ ⇧ R` (macOS System Shortcuts), `Shift+F10` (XWin), `Shift+F10` (GNOME), `Shift+F10` (KDE), `Shift+F10` (Emacs), `Shift+F10` (Sublime Text), `Shift+F10` (Sublime Text (macOS)), `Ctrl+F5` (Visual Studio), `⌃ F5` (Visual Studio (macOS)), `F6` (NetBeans), `Alt+Shift+X` (Eclipse), `⌘ ⇧ F11` (Eclipse (macOS)) 来重新运行上次的测试。

4. 请等待测试函数旁边的图标变绿以确保测试通过。 如果图标没有变成绿色，请不断修改代码直到测试通过。

![重新运行测试](https://resources.jetbrains.com/help/img/idea/2026.3/rerun-test-kotlin.png)

Procedure: 迭代

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

1. 在您的测试类中，再次使用 `Alt+Insert` (Windows), `⌘ N` (macOS), `⌃ N` (IntelliJ IDEA Classic (macOS)), `⌘ N` (macOS System Shortcuts), `Alt+Insert` (XWin), `Alt+Insert` (GNOME), `Alt+Insert` (KDE), `Alt+Insert` (Emacs), `Alt+Insert` (Sublime Text), `⌘ N` (Sublime Text (macOS)), `Alt+Insert` (Visual Studio), `⌘ ⌃ N` (Visual Studio (macOS)), `Alt+Insert` (NetBeans), `Alt+Insert` (Eclipse), `⌘ N` (Eclipse (macOS)) 创建一个新的测试函数。

2. 选择第二个测试用例，以指定您正在测试的功能的更多需求。 请记住，您可以使用 IntelliJ IDEA 的功能来创建类和函数，以使编译器保持满意。

![创建新测试](https://resources.jetbrains.com/help/img/idea/2026.3/add-another-test-kotlin.png)

3. 运行此第二个测试用例，以展示其因正确的原因而失败。

4. 更改被测试函数中的代码以使此测试通过。

![改进代码以通过第二个测试](https://resources.jetbrains.com/help/img/idea/2026.3/improve-code-kotlin.png)

5. 重新运行两个测试，方法是按 `Ctrl+Shift+F10` (Windows), `⌃ ⇧ R` (macOS), `⌃ ⇧ F10` (IntelliJ IDEA Classic (macOS)), `⌃ ⇧ R` (macOS System Shortcuts), `Ctrl+Shift+F10` (XWin), `Ctrl+Shift+F10` (GNOME), `Ctrl+Shift+F10` (KDE), `Ctrl+Shift+F10` (Emacs), `Ctrl+Shift+F10` (Sublime Text), `Ctrl+Shift+F10` (Sublime Text (macOS)), `Ctrl+Alt+F5` (Visual Studio), `⌃ ⌥ F5` (Visual Studio (macOS)), `Alt+Shift+F6` (NetBeans), `Ctrl+Shift+F10` (Eclipse), `⌃ ⇧ R` (Eclipse (macOS)) 在测试类内，而不是在单个函数内，看看两个测试现在是否都通过。 如果任一测试未通过，请对代码进行必要的更改以确保测试通过。

![第二个测试通过](https://resources.jetbrains.com/help/img/idea/2026.3/test-successful-kotlin.png)

## 总结

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

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

