EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行。获得了Google和Yourkit的支持。bash
由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的bytecode instrumentation有两种选择以下:ui
其1、在EvoSuite的 @RunWith(EvoRunner.class)中,会调用EvoSuite本身的classloader,而在这个过程当中就调用它本身提供的bytecode instrumentation来完成对应的分析。这就致使了EvoSuite的bytecode instrumentation是早于其余代码覆盖工具完成。spa
其2、EvoSuite会启动一个Java的代理,代理会拦截所有的class loading,而后加入其EvoSuie的bytecode instrumentation。代理
EvoSuite目前默认是第一种,可是若是可使用第二种,测者建议使用第二种,由于第二种能够有效避免和相似Jacoco工具的bytecode instrumentation的冲突,可是若是在测试在代理启动前就执行了,那么就不会起做用了范围会报EvoSuite的错误。code
在使用过程当中,若是发现代码覆盖报告所有是0,能够尝试经过一下方式切换上面的两种bytecode instrumentation方式。ssl
@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>复制代码