![](/style/images/good.png)
![](/style/images/bad.png)
快速提升单元覆盖率
source link: http://www.neohope.com/2020/09/19/快速提升单元覆盖率/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
最近到新公司,接手了几十个老项目。由于项目特殊需要,需要快速将一个模块的单元测试覆盖率提升到80%以上。
怀着忐忑的心情看了一下,该模块居然还有一个单元测试,整体覆盖率为0,欲哭无泪啊。
手工写是来不及了,那就想办法自动生成吧。找了一下,最终决定采用EvoSuite。
EvoSuite有多种方式可以配置,包括命令行模式、Maven插件模式以、Eclipse插件模式、IDEA插件模式等。
一、maven模式
1、修改POM文件,在对应位置添加相关内容
<properties> <evosuiteVersion>1.0.6</evosuiteVersion> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.evosuite</groupId> <artifactId>evosuite-standalone-runtime</artifactId> <version>${evosuiteVersion}</version> <scope>test</scope> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <versionRange>[2.5,)</versionRange> <goals> <goal>prepare</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.evosuite.plugins</groupId> <artifactId>evosuite-maven-plugin</artifactId> <version>${evosuiteVersion}</version> <executions> <execution> <goals> <goal>prepare</goal> </goals> <phase>process-test-classes</phase> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.17</version> <configuration> <properties> <property> <name>listener</name> <value>org.evosuite.runtime.InitializingListener</value> </property> </properties> </configuration> </plugin> <!--plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.8</version> <executions> <execution> <id>add-test-source</id> <phase>generate-test-sources</phase> <goals> <goal>add-test-source</goal> </goals> <configuration> <sources> <source>.evosuite/evosuite-tests</source> </sources> </configuration> </execution> </executions> </plugin--> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
2、生成单元测试
mvn -DmemoryInMB=4000 -Dcores=4 evosuite:generate test #生成的单元测试在 #.evosuite/best-tests #拷贝到正确的路径就可以了
二、命令行模式
1、下载evosuite-1.0.6.jar包
2、收集项目依赖,把evosuite-1.0.6.jar也放入target/dependency文件夹
mvn dependency:copy-dependencies
3、生成单元测试
cd target/dependency java -jar evosuite-1.0.6.jar -help java -Duse_separate_classloader=false -jar evosuite-1.0.6.jar -projectCP YOUR_CLASS_PATH -generateSuite -target ..\classes #生成的单元测试在 #target/dependency/evosuite-tests #拷贝到正确的路径就可以了
三、Eclipse插件模式
在eclipse中安装evosuite插件,需要额外的插件地址:
http://www.evosuite.org/update
四、单元覆盖率
1、插件安装
在eclipse中搜索并安装EclEmma Java Code Coverage插件,直接搜索即可
2、修改class loader配置
#默认使用单独的class loader,覆盖率会为0 separateClassLoader = true #全局替换为 separateClassLoader = false
3、然后在项目上,右键,Coverage as-》JUnit Test
就可以看到覆盖率了哦。
我试过两个项目,一个简单的项目,覆盖率为95以上。
一个复杂一些的Web项目,覆盖率仅为30%左右。
五、总结
生成的单元测试,实际上没有什么维护性,如何用于生产环境,待探索。
Recommend
-
55
-
22
快速了解iOS单元测试我叫Vincent0.0942020.07.27 10:43:24字数 1,293阅读 78
-
3
一文让你快速上手 Mockito 单元测试框架 2020-05-30...
-
6
在写 asp dotnet core 时,如果没有单元测试保证,需要每个方法都从 web api 的入口开始运行,此时的执行效率是很低的。而如果写单元测试,又有一个坑的问题是写单元测试也是需要时间的。本文告诉大家一些提高效率的方法,这些方法不是正经的用法,但是能...
-
10
前端质量提升利器-马可代码覆盖率平台 - vivo互联网技术 - OSCHINA - 中文开源技术交流社区 本文根据Song Jiachao老师在“2021 vivo开发者大会"现场演讲内容整理而成。公众号回复**【2021VDC】**获取互联网技术分会场议...
-
5
作者 | 忠素一、背景介绍最近部门在推进质量标准化,通过标准化研发、交付、部署、运维等过程,减少缺陷率和返工率,提高整体的工作效率。而单元测试又是软件研发过程中的重要一环,此文可以帮助理解单元测试插件的运行过程,了解 mock 框架以...
-
5
使用coverlet统计单元测试的代码覆盖率 单元测试是...
-
1
在本文将探讨如何在Rust项目中自动完成单元测试并执行覆盖率测试。我们将使用rust-analyzer插件、配置.vscode/settings.json文件以及编写一个Python脚本变相实现cargo命令的hook。最终效果按下“Run Test”按钮后自动完成单元测试及覆盖率测...
-
4
提升郴州广播电视用户覆盖率,郴州市人民政府与中国广电湖南网络公司签约导语:8月22日,郴州市人民政府与中国广电湖南网络股份有限公司在郴州举行深化数字经济战略合作签约仪式。 8月22日,郴州市人民政府与中国广电...
-
8
Posted by: Phodal Huang April 1, 2024, 6:02 p.m. 在开发 IDE 插件 AutoDev 时,我们一直遵循着 Unit Mesh 的基本思想,即 AI 所生成的应该是可执行的单元(Unit)...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK