IntelliJ IDEA测试驱动开发
无论您喜欢在编写生产代码之前编写测试,还是想在以后创建测试,IntelliJ IDEA 可以轻松创建和运行单元测试。在本教程中,我们将展示如何使用 IntelliJ IDEA 来首先编写测试(测试驱动开发或 TDD)。
测试驱动开发(Test-Driven Development)简称 TDD,是以测试作为软件开发的核心,将测试贯穿于软件开发工程的方法论,TDD 同时也是 XP(极限编程)的核心之一。
IntelliJ IDEA 测试驱动开发条件
如果要实现 IntelliJ IDEA 测试驱动开发有以下的几个先决条件:
- 你已经在 IntelliJ IDEA 中创建了一个 Java 项目。
- 您也可以使用生产和测试代码的文件夹,可以是您手动创建的或者是创建项目时创建的。
- 您可以通过添加测试库或在 Gradle 或 Maven 中添加依赖项,在类路径上有 JUnit 4。
- 源和测试根源是是正确配置的:源根将显示为蓝色文件夹,测试文件夹将具有绿色背景。
- 您已在项目中创建了所需的包。
创建第一个测试
鉴于我们首先编写我们的测试,而不必为我们测试可用的类,我们将通过项目面板创建我们的第一个测试。
- 右键单击要创建测试的包,然后选择:新建| Java 类(New | Java Class)。
- 输入测试名称 - 假设我们正在使用 JUnit 进行测试,这可能是 [Something] 测试,例如
MoodAnalyserTest
。
- 将光标放在类的大括号中的某个位置,按 Alt+Insert。
- 从菜单中选择:测试方法| JUnit 4(Test Method | JUnit 4)。这将创建一个带有默认模板的测试方法。填写测试名称,按回车键,光标将结束于方法体。
你可以改变默认的测试方法模板,例如,如果您希望将方法名称的开始从test
更改为should
。
编写测试体
为不存在的类和方法编写测试代码可能似乎是直觉的,IntelliJ IDEA 保持编译器使用的简单直观。IntelliJ IDEA 可以为您创建类和方法,如果它们不存在。
- 编写测试描述你想要实现的测试,按 Alt+Enter 在任何不存在的类上输入并选择“创建类'[ClassName]'“。这将作为您提供一个适用于编译器的最小实现
- 继续编写测试主体,包括您不需要的方法的名称,您可以再次使用 Alt+Enter 并选择“创建方法'[methodName]'“来使 IntelliJ IDEA 创建一个裸机框架方法。
与往常一样,您可以使用 IntelliJ IDEA 的重构工具创建变量来存储结果,如果正确的库位于类路径上,IntelliJ IDEA 将为您导入最合适的类。
运行测试
当遵循 TDD 方法时,通常你会经历一个 Red-Green-Refactor 循环。你会运行一个测试,看到它失败(转到红色),实现最简单的代码以使测试通过(转到绿色),然后重构代码,使您的测试保持绿色,并且代码足够干净。
这个循环的第一步是运行测试并且看到它失败。
鉴于我们已经使用 IntelliJ IDEA 的功能来创建我们正在测试的方法的最简单的空实现,我们不期望我们的测试通过。
- 从测试内部,按下 Ctrl+Shift+F10 以运行此单个测试。
结果将显示在“运行”对话框中。该测试名称旁边会有一个图标(红色表示异常),或黄色表示失败的断言。对于任一类型的失败,还会显示一条消息,说明出了什么问题。
实现代码
下一步是使测试通过,这意味着实现最简单的工作。
- 您可以使用通常的方法导航到正在测试的代码 - 点击方法名称,在光标位于方法名称上时按下 Ctrl+Alt+B,或者按下 Ctrl+Shift+T 以在测试和生产代码之间切换。
- 对于方法进行更改以使测试通过。通常使用 TDD,最简单的工作可能是硬编码您的预期值。我们稍后会看到,如何迭代这个过程将导致更逼真的生产代码。
- 重新运行测试,使用 Shift+F10 重新运行上一个测试。
- 查看测试通行证 - 测试方法旁边的图标应该变为绿色。如果没有,则在测试通过之前进行所需的更改。
迭代
开发代码是一个迭代过程。当采用 TDD 风格的方法时,这更为真实。为了推出更复杂的行为,我们为其他情况添加测试。
- 在测试类中,再次使用 Alt+Insert 来创建一个新的测试方法。
- 选择第二个测试用例,指定您正在测试的方法的更多要求。请记住,您可以使用 IntelliJ IDEA 的功能来创建类和方法来保持编译器的快乐。
- 运行第二个测试用例,显示出正确的原因失败。
- 更改正在测试的方法中的代码以使此测试通过。
- 通过在测试类内部按 Ctrl+Shift+F10 重新运行这两个测试,而不是在单个方法中,并且看到这两个测试都通过了。如果任一测试失败,请对代码进行所需的更改以确保测试通过。
总结
以第一个测试样式编写第一个测试需要少量设置:创建测试类,创建测试方法,然后创建最终将成为生产代码的代码的空实现。IntelliJ IDEA 自动执行了很多初始设置。
在您迭代过程中,创建测试,然后进行所需的更改以使这些测试通过,您将为您所需的功能构建一套全面的测试套件,以及满足这些要求的最简单的解决方案。