IntelliJ IDEA 2025.1 Help

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

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

创建新项目

  1. 启动 IntelliJ IDEA。

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

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

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

  4. 从 JDK 列表中选择您想在项目中使用的 JDK。

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

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

  5. 点击 创建。

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

创建新的软件包

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

  2. 请为新包命名 com.example.demo 并按 Enter。

编写测试主体

创建您的第一个测试

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

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

    在弹出窗口中,请为新包和测试类命名: com.example.demo.CalculatorTest。

    测试类已创建
  2. 将文本光标放在类中的大括号内,按 Alt+Insert。

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

    命名函数 testMultiplyBy2 ,按下 Enter ,光标将定位到函数体内。

    创建您的第一个测试

    您可以更改 默认测试函数模板——例如,如果您希望将函数名称的开头从 测试 更改为 should。

编写测试主体

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

编写您的测试,描述您想要实现的目标,在任何不存在的类上按 Alt+Enter 并选择 创建类。 这将为您提供一个让编译器满意的最小实现。

  1. 请输入 val calculator = Calculator() ,按 Alt+Enter ,并选择 创建类“Calculator”。

    创建新类
  2. 从 选择类容器 中选择 提取到单独文件。 在打开的对话框中,选择我们 先前创建main 中的 com.example.demo 包。

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

    输入 val result = calculator.parse("2 * 2") 并按 Alt+Enter。 选择 创建成员函数 以让 IntelliJ IDEA 创建一个基本的脚本函数。

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

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

    如果函数未自动导入,请将文本光标置于 assertEquals ,按下 Alt+Enter ,选择 导入功能 ,然后选择 org.jetbrains.kotlin:kotlin-test。

    assertEquals() 用于检查参数是否相等,如果不相等则测试失败

运行测试

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

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

鉴于我们使用 IntelliJ IDEA 功能创建了该方法的最简单空实现,我们不期望测试通过。

  • 在测试内部,按 Ctrl+Shift+F10 运行此单个测试。

    结果将显示在 运行对话框中。 测试名称旁会有一个图标——红色表示异常,黄色表示断言失败。 对于任意类型的故障,还会显示说明问题出在哪里的消息。

    运行测试

实现代码

下一步是使测试通过,这意味着要实现最简单可行的方案。

  1. 您可以使用常规功能导航到正在测试的代码——点击函数名称、在文本光标位于函数名称上时按 Ctrl+Alt+B ,或按 Ctrl+Shift+T 在测试代码和生产代码之间切换。

  2. 对函数进行修改以使测试通过。 通常在 TDD 中,最简单的起作用的方法可能是硬编码您的预期值。 稍后我们将看到,如何重复此过程将导致更实际的生产代码。

    修复方法的代码以满足测试条件
  3. 请使用 Shift+F10 来重新运行上次的测试。

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

    重新运行测试

迭代

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

  1. 在您的测试类中,再次使用 Alt+Insert 创建一个新的测试函数。

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

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

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

    改进代码以通过第二个测试
  5. 重新运行两个测试,方法是按 Ctrl+Shift+F10 在测试类内,而不是在单个函数内,看看两个测试现在是否都通过。 如果任一测试未通过,请对代码进行必要的更改以确保测试通过。

    第二个测试通过

汇总

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

当您重复进行此过程、创建测试并进行所需的更改以使这些测试通过时,您将为所需功能构建一套全面的测试套件,以及满足这些要求的最简单解决方案。

最后修改日期: 2025年 4月 24日