自动化单元工具EvoSuie的代码覆盖报告

作者 : 开心源码 本文共1469个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共168人阅读

EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行。得到了Google和Yourkit的支持。

生成的测试cases的运行依赖

由EvoSuite生成的测试cases需要EvoSuite框架的runtime包支持才能进行测试,因而要在工程中加入如下的Maven依赖

<dependency>  <groupId>org.evosuite</groupId>  <artifactId>evosuite-standalone-runtime</artifactId>  <version>1.0.6</version>  <scope>test</scope></dependency>

注意:EvoSuite的bytecode instrumentation和相似Jacoco这类工具在bytecode instrumentation上有可能有冲突,导致最后的覆盖率统计都是0

bytecode instrumentation是改变了编译器上生成的一个类的bytecode,用它可以完成如:计算一个方法被执行需要多长时间、改变它的执行流程等特别的流程。客户可以增加/改变应用程序的字节码,自从有了这个功能后,就不需要修改整个应用程序源。

EvoSuite的字节码检测

在EvoSuite的bytecode instrumentation有两种选择如下:

其一、在EvoSuite的 @RunWith(EvoRunner.class)中,会调用EvoSuite自己的classloader,而在这个过程中就调用它自己提供的bytecode instrumentation来完成对应的分析。这就导致了EvoSuite的bytecode instrumentation是早于其余代码覆盖工具完成。

其二、EvoSuite会启动一个Java的代理商,代理商会阻拦一律的class loading,而后加入其EvoSuie的bytecode instrumentation。

EvoSuite目前默认是第一种,但是假如可以使用第二种,测者建议使用第二种,由于第二种可以有效避免和相似Jacoco工具的bytecode instrumentation的冲突,但是假如在测试在代理商启动前就执行了,那么就不会起作用了范围会报EvoSuite的错误。

在使用过程中,假如发现代码覆盖报告一律是0,可以尝试通过一下方式切换上面的两种bytecode instrumentation方式。

@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, separateClassLoader = true, useJEE = true)

修改separateClassLoader = true为false(从方式1 变成方式2),假如一切自效果,那么可以再Maven的pom中加入对应的配置:

<configuration>    <extraArgs> -Duse_separate_classloader=false </extraArgs></configuration>

结语:

最后跟大家推荐一个学习资料分享群:175317069,里面大牛已经为我们整理好了许多的学习资料,有自动化,接口,性能等等的学习资料!

人生是一个逆水行舟的过程,不进则退,咱们一起加油吧!

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 自动化单元工具EvoSuie的代码覆盖报告

发表回复