单元测试覆盖率的自动控制技术

简介: Jacoco是Java程序覆盖率工具,可以在pom.xml通过配置来自动控制程序的覆盖率

1 通过Jacoco + mvn控制Java程序覆盖率
Jacoco是Java程序覆盖率工具,可以在pom.xml通过配置来自动控制程序的覆盖率。

pom.xml

<build>
  <plugins>
      <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.8</version>
            <executions>
                <execution>
                    <id>pre-test</id>
                    <goals><goal>prepare-agent</goal></goals>
                </execution>
                <execution>
                    <id>post-test</id>
                    <phase>test</phase>
                    <goals><goal>report</goal></goals>
                </execution>
                <execution>
                    <id>check-coverage</id>
                    <goals><goal>check</goal></goals>
                    <configuration>
                        <rules>
                            <rule>
                                <element>BUNDLE</element>
                                <limits>
                                    <limit>
                                        <counter>LINE</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.90</minimum>
                                    </limit>
                                </limits>
                            </rule>
                        </rules>
                    </configuration>
                </execution>
                <execution>
                    <id>pre-unit-test</id>
                    <goals>
                    <goal>prepare-agent</goal>
                    </goals>
                     <configuration>
                        <destFile> target/coverage-reports/jacoco.exec</destFile>
                         <propertyName>surefireArgLine</propertyName>
                     </configuration>
                </execution>
                <execution>
<id>post-unit-test</id>
                     <phase>test</phase>
                     <goals>
                        <goal>report</goal>
                     </goals>
                     <configuration>
                        <dataFile> target/coverage-reports/jacoco-ut.exec</dataFile>
                        <outputDirectory>target/jacoco-ut</outputDirectory>
                      </configuration>
                   </execution>
            </executions>
        </plugin>
      </plugins>
</build>

在pom.xml中

<limit>
  <counter>LINE</counter>
  <value>COVEREDRATIO</value>
  <minimum>0.90</minimum>
</limit>

0.90,即90%为最小行覆盖率,当被测程序行覆盖率<=90%,则运行mvn verify构建失败,否则构建成功。

构建成功情形

C:\Code\MyJava\javawork\ChatGPTEbusiness>mvn verify
…
Results:
[INFO]
[INFO] Tests run: 83, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- jacoco:0.8.8:report (post-test) @ ChatGPTEbusiness ---
[INFO] Loading execution data file C:\Code\MyJava\javawork\ChatGPTEbusiness\target\jacoco.exec
[INFO] Analyzed bundle 'ChatGPTEbusiness' with 12 classes
[INFO]
[INFO] --- jacoco:0.8.8:report (post-unit-test) @ ChatGPTEbusiness ---
[INFO] Skipping JaCoCo execution due to missing execution data file.
[INFO]
[INFO] --- jar:3.3.0:jar (default-jar) @ ChatGPTEbusiness ---
[INFO] Building jar:

构建成功失败情形

C:\Code\MyJava\javawork\ChatGPTEbusiness>mvn verify
…
Results:
[INFO]
[INFO] Tests run: 83, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- jacoco:0.8.8:report (post-test) @ ChatGPTEbusiness ---
[INFO] Loading execution data file C:\Code\MyJava\javawork\ChatGPTEbusiness\target\jacoco.exec
[INFO] Analyzed bundle 'ChatGPTEbusiness' with 12 classes
[INFO]
[INFO] --- jacoco:0.8.8:report (post-unit-test) @ ChatGPTEbusiness ---
[INFO] Skipping JaCoCo execution due to missing execution data file.
[INFO]
[INFO] --- jar:3.3.0:jar (default-jar) @ ChatGPTEbusiness ---
[INFO] Building jar: C:\Code\MyJava\javawork\ChatGPTEbusiness\target\ChatGPTEbusiness-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- jacoco:0.8.8:check (check-coverage) @ ChatGPTEbusiness ---
[INFO] Loading execution data file C:\Code\MyJava\javawork\ChatGPTEbusiness\target\jacoco.exec
[INFO] Analyzed bundle 'ChatGPTEbusiness' with 12 classes
[WARNING] Rule violated for bundle ChatGPTEbusiness: lines covered ratio is 0.82, but expected minimum is 0.90
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:

11.775 s
[INFO] Finished at: 2025-08-09T15:59:32+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.jacoco:jacoco-maven-plugin:0.8.8:check (check-coverage) on project ChatGPTEbusiness: Coverage checks have not been met. See log for details. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

注意,这里使用mvn test是没用的

C:\Code\MyJava\javawork\ChatGPTEbusiness> mvn test
…
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:

11.718 s
[INFO] Finished at: 2025-08-09T16:02:47+08:00
[INFO] ------------------------------------------------------------------------

2自动控制其他程序覆盖率

Python语言

pytest --cov --cov-fail-under=80

Go语言

go test -coverprofile=coverage.out && goveralls -coverprofile=coverage.out -service=travis-ci -repotoken $COVERALLS_TOKEN

C#语言

dotnet test /p:CollectCoverage=true /p:Threshold=80

顾翔凡言:人工智能未来的发展瓶颈在于对知识的更新。唯一不变的是变化,知识发生了变化,人工智能软件能否及时跟进变化,可能阻碍人工智能的使用。

目录
相关文章
|
10月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
207 4
|
2月前
|
Web App开发 人工智能 JavaScript
主流自动化测试框架的技术解析与实战指南
本内容深入解析主流测试框架Playwright、Selenium与Cypress的核心架构与适用场景,对比其在SPA测试、CI/CD、跨浏览器兼容性等方面的表现。同时探讨Playwright在AI增强测试、录制回放、企业部署等领域的实战优势,以及Selenium在老旧系统和IE兼容性中的坚守场景。结合六大典型场景,提供技术选型决策指南,并展望AI赋能下的未来测试体系。
|
12天前
|
人工智能 自然语言处理 前端开发
深度解析Playwright MCP:功能、优势与挑战,AI如何提升测试效率与覆盖率
Playwright MCP通过AI与浏览器交互,实现自然语言驱动的自动化测试。它降低门槛、提升效率,助力测试工程师聚焦高价值工作,是探索性测试与快速验证的新利器。
|
2月前
|
人工智能 资源调度 jenkins
精准化回归测试:大厂实践与技术落地解析
在高频迭代时代,全量回归测试成本高、效率低,常导致关键 bug 漏测。精准化测试通过代码变更影响分析,智能筛选高价值用例,显著提升测试效率与缺陷捕获率,实现降本增效。已被阿里、京东、腾讯等大厂成功落地,成为质量保障的新趋势。
|
11月前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
4月前
|
安全 测试技术 持续交付
软考软件评测师——基于风险的测试技术
本文详细阐述了测试计划的核心要素与制定流程,涵盖测试范围界定、实施策略规划、资源配置及风险管理机制。通过风险识别方法论和评估模型,构建了完整的质量保障体系。同时,针对不同测试级别与类型提供具体配置建议,并提出技术选型原则与实施规范,确保测试活动高效有序开展,为项目成功奠定基础。内容结合实际经验,具有较强指导意义。
|
12月前
|
安全 测试技术
北大李戈团队提出大模型单测生成新方法,显著提升代码测试覆盖率
【10月更文挑战第1天】北京大学李戈教授团队提出了一种名为“统一生成测试”的创新方法,有效提升了大模型如GPT-2和GPT-3在单一测试中的代码生成覆盖率,分别从56%提升至72%和从61%提升至78%。这种方法结合了模糊测试、变异测试和生成对抗网络等多种技术,克服了传统测试方法的局限性,在大模型测试领域实现了重要突破,有助于提高系统的可靠性和安全性。然而,该方法的实现复杂度较高且实际应用效果仍需进一步验证。论文可从此链接下载:【https://drive.weixin.qq.com/s?k=ACAAewd0AA48Z2kXrJ】
251 1
|
12月前
|
存储 监控 网络协议
服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
【10月更文挑战第11天】服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
564 32
|
11月前
|
数据采集 前端开发 安全
前端测试技术
前端测试是确保前端应用程序质量和性能的重要环节,涵盖了多种技术和方法
|
11月前
|
前端开发 JavaScript 测试技术
前端小白逆袭之路:如何快速掌握前端测试技术,确保代码质量无忧!
【10月更文挑战第30天】前端开发技术迭代迅速,新手如何快速掌握前端测试以确保代码质量?本文将介绍前端测试的基础知识,包括单元测试、集成测试和端到端测试,以及常用的测试工具如Jest、Mocha、Cypress等。通过实践和学习,你也能成为前端测试高手。
462 4

热门文章

最新文章