*本期内容源于开发伙伴真实案例投稿.
— 以下为投稿正文 —
单元测试能够有效降低程序出现BUG的几率。同时,自动化的单元测试避免了代码出现回归,在编写完成后,可以随时随地快速运行测试,而不是将代码部署到设备,再手动覆盖各种执行路径。
本文主要分享SpringBoot技术栈的单元测试。
一、引入SpringBootTest + JUnit + Mockito依赖
创建一个SpringBoot项目,添加相关依赖,这里主要是添加测试依赖:
添加spring-boot-starter-test之后,就会自动引入相关依赖了:
二、集成JaCoCoMaven Plugin插件
Jacoco是一种用于测量代码覆盖率的工具,它能够生成覆盖率数据并帮助我们找出代码中未被测试的部分。在Maven项目中,我们可以使用jacoco-maven-plugin插件来生成代码覆盖率报告。
在项目的 pom.xml添加以下配置:
这样配置之后,可以通过执行以下Maven命令生成覆盖率报告:
Part.01
单元测试配置
我们用Java语言配置测试框架和Mock框架,如果不进行配置,默认为自动,iFlyCode会自动检测项目上下文。
该配置项能在一定程度上,影响生成代码的匹配度。
Part.02
单元测试生成
1、iFlyCode单元测试生成入口较明显,位于方法的上方,点击单元测试即可打开生成面板。
2、在单元测试生成面板,可以看到在依次生成了多个用例,并且在用例下方生成了相对应的代码。
用例分为了以下三种类型:
-
正向用例:自动生成,用于测试正向流程,可手动修改。
-
反向用例:自动生成,用于测试空值、边界值、异常场景,可手动修改。
-
自定义:当iFlyCode生成的用例不符合预期时,我们可以进行手动输入用例来人工补偿。
3、点击保存单测文件后,即可生成相应的单元测试文件。
四、生成覆盖率报告
在完成单元测试的编写后,执行单元测试,可以验证业务代码是否符合预期。
当我们写好了一批单元测试后,可以通过覆盖率报告,查看是否已检测到所有代码****。
执行mvnverify命令,可以在以下位置找到报告:
打开这个页面后,可以看到每个路径的汇总覆盖率:
也可以看到每个类的覆盖率:
当进入每个类时,可以看到每个方法的覆盖率:
点击具体方法后,可以看到不同颜色标记的代码行:
-
绿色:完全覆盖的代码行
-
黄色:部分覆盖的代码行(例如,条件分支)
-
红色:未覆盖的代码行
五、常见问题及应对
01
引入错误
应对:这类引入错误,有些是库版本不一致(如图,引入了JUnit4API),有些是误引入使用不到的API(如图,灰色import语句),这类问题,可以手动修改。
02
使用高JDK版本API
应对:这类问题可以通过手动的方式进行修改,使用类似作用的API进行替换。
03
错误断言
应对:这类问题,主要是因为输入和预期输出没有控制好,导致的测试失败。这类问题可以在生成测试用例时,按照实际情况调整用例输入和预期输出。