1

1、简要介绍

  • 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有两种选择如下:

其一、在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>`



结语:

如果需要相关学习资料的朋友可以加我的qq群:903217991,里面有小伙伴为大家整理好的自动化,接口,性能等等的学习资料,也可一起交流学习,人生如同逆水行舟,不进则退,咱们一起加油努力吧!


AI智能浪人
140 声望27 粉丝

走太急,痛的是脚,想太多,累的是心,人生短暂,何不让自己活得轻松自在些。人一辈子,最好的活法就是:把日子过得有滋有味让自己活得问心无愧!