本地就能跑的开源利器:Istanbul(nyc)
前端开发最怕改完代码不知道有没有影响到老功能。有个同事前两天重构登录页,顺手删了段“看似没用”的校验,结果线上用户登不进去了。后来我们加了 nyc,每次跑单元测试自动出覆盖率报告,谁改的哪行代码一目了然。
nyc 是 Istanbul 的命令行工具,支持 Node.js 项目,安装特别简单:
npm install -g nyc写好 mocha 或 jest 测试后,直接加个前缀就能跑:
nyc npm test结束后会生成 HTML 报告,点开就能看到哪些 if 分支没覆盖到,绿色是已覆盖,红色是漏网之鱼。
Java 后端别错过:JaCoCo
公司一个老系统用 Spring Boot 写的,团队新来了几个实习生,提 PR 经常漏测关键逻辑。后来我们在 CI 里接入 JaCoCo,要求单元测试覆盖率不低于 70% 才能合并。
它跟 Maven 和 Gradle 都能无缝集成。比如在 pom.xml 加一段插件配置:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>跑完 mvn test,target/site/jacoco 就有详细页面,连每行是否执行都标得清清楚楚。
想看全局?试试 SonarQube 免费版
项目一大,光看单个文件覆盖率不够用了。我们组现在用 SonarQube 搭了个本地扫描平台,每天自动拉代码分析,包括重复代码、漏洞、还有测试覆盖率。
它本身不跑测试,但能导入 nyc 或 JaCoCo 生成的数据,拼成仪表盘。新成员进来第一周写的代码覆盖率偏低,管理员一眼就看出来了。
启动方式也简单,用 Docker 一行命令就行:
docker run -d --name sonarqube -p 9000:9000 sonarqube:community打开浏览器访问 localhost:9000,按提示注册账号,再把项目配置好,后续提交都会自动检测。
小建议:别只盯着数字
有次为了冲 90% 覆盖率,有人给 getter/setter 方法也补测试,其实没啥意义。真正该关注的是核心业务逻辑有没有被测到,比如支付流程、订单状态变更这些。
工具只是帮手,关键还是得结合人工判断。覆盖率低的地方,不妨坐下来和同事一起 review 下,说不定能发现设计上的盲点。