EvoSuie的代码覆盖报告

1、简要介绍java

  • EvoSuite开源工具能够基于Eclipse进行测试用例的自动生成,生成的测试用例符合Junit标准(直接生成可进行Junit的java文件),知足分支覆盖(即断定覆盖)|
  • Evosuite分为Eclipse插件使用和命令行两种使用方法,推荐使用命令行。如下会详细说明

图片描述

生成的测试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有两种选择以下:测试

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

其2、EvoSuite会启动一个Java的代理,代理会拦截所有的class loading,而后加入其EvoSuie的bytecode instrumentation。spa

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>`

结语:

若是须要相关学习资料的朋友能够加个人qq群:903217991,里面有小伙伴为你们整理好的自动化,接口,性能等等的学习资料,也可一块儿交流学习,人生如同逆水行舟,不进则退,我们一块儿加油努力吧!

相关文章
相关标签/搜索