工具尝鲜--单元测试自动生成工具 evosuite

做者|高嘉怡java

Evosuite简介


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

经过使用此自动测试工具可以在保证代码覆盖率的前提下极大地提升测试人员的开发效率。可是只能辅助测试,并不能彻底取代人工,测试用例的正确与否还需人工判断。web

官方提供了包括:命令行工具、eclipse 插件、idea 插件、maven 插件 在内的数种运行方式。本文主要介绍:idea 插件、maven 插件。apache

Evosuite的配置与使用



maven -- EvoSuite插件微信

一、pom.Xml配置

配置 junit 版本app

       
         
       
       
        
        
                 
        
        
  1. eclipse

  2. maven

  3. 编辑器

  4. ide

  5. 工具

<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> 配置evosuite 插件:<build> <plugins> <plugin> <groupId>org.evosuite.plugins</groupId> <artifactId>evosuite-maven-plugin</artifactId> <version>1.0.6</version> </plugin> </plugins></build><dependency> <groupId>org.evosuite</groupId> <artifactId>evosuite-standalone-runtime</artifactId> <version>1.0.6</version> <scope>compile</scope></dependency>

二、maven -- EvoSuite插件使用

使用以前先了解一下基本命令:

  • prepare:须要同时运行EvoSuite测试和现有测试mvn evosuite:prepare test

  • compile:表示编译。evosuite 是基于编译后的 .class 文件生成用例的,因此须要先编译

  • -DmemoryInMB=2000:表示使用 2000MB 的内存

  • -Dcores=2 表示用2个 cpu 来并行加快生成速度

  • -Dcuts=alexp.blog.service.PostServiceImpl

    示只针对 alexp.blog.service.PostServiceImpl 这个类生成用例。多个用例能够用英文逗号分隔

  • -DtargetFolder=src/test/java/evosuite

    示生成的用例放到 src/test/java/evosuite

  • evosuite:generate :表示执行生成用例

  • evosuite:export:默认状况下,EvoSuite在“ .evosuite”文件夹中建立测试。经过使用“导出”,将生成的测试复制到另外一个文件夹,该文件夹能够使用“ targetFolder”选项设置(默认值为“ src / test / java”)

  • evosuite:clean:删除“ .evosuite”文件夹中的全部数据,该文件夹用于存储到目前为止生成的全部最佳测试

具体更多详情可evosuite:help进行查看

准备被测试方法,如:demoService

控制台执行:

mvn compile evosuite:generate  -Dcuts=demoTest.testService.demoTwoService  evosuite:export  -DtargetFolder=src/main/java/testcase

对指定文件进行编译生成用例 放置指定文件

生成结果以下,有两个文件:

demoService_ESTest:测试用例文件

demoService_ESTest_scaffolding:用例基类,用于在开始测试前初始化


注意:

一、运行后会产生evosuite 文件 存储生成测试用例文件

二、用例生成地址为:DtargetFolder+ Dcuts被测文件路径,

缘由:evosuite:export 经过用“导出”,将生成的测试复制

到另外一个文件夹,(根据自身状况)导package 与

import须要手动调整


查看运行结果

Example 1:被测试内容demoTwoService.java

mvn  compile  evosuite:generate  -Dcuts

=demoTest.testService.demoTwoService 

生成测试方法case:

IDEA-- EvoSuite插件的配置与使用

一、打开IDE,进入setting(mac版本是Preferences)选择plugins,点击Browse repositories,搜索EvoSuite Plugin,而后选择Install plugin

二、重启IDEA

三、打开idea选择文件右键,就能够看见Run EvoSuite

四、点击Run EvoSuite 能够看见参数输入框

  • -DmemoryInMB=2000 表示使用 2000MB 的内存

  • -Dcores=2 表示用2个 cpu 来并行加快生成速度

  • Mavenlocation:Maven地址,当项目是Maven

    项目时须要

  • EvoSuite location:evosuite-1.0.6.jar包地址,

    项目是非Maven项目时须要

配置maven(D:\workspace\maven\apache-maven

-3.6.3\bin\mvn.cmd)路径或EvoSuitejar路径

如上,配置完Maven location(or EvoSuite location)

回车即触发执行,执行完毕后会提示:

Example 2:被测试内容demoService

 
           
           
             
           
           
            
            
                     
            
            

 
           

 
           

生成的测试用例:

覆盖率:

使用EvoSuite的几种状况

例1:以Example 1:被测试内容demoTwoService.java

为例,查看本类调用生成测试用例状况

被测试内容以下:

            
              
            
            
             
             
                      
             
             

生成测试用例

(由于本类2个方法,只截取Test方法的用例):

运行Test方法的用例:

很明显的是Test调用本类的Math方法,但生成的测试用例

却少了一条 b=0的状况。

覆盖率为84%

例2:不在同一个类调用方法

生成测试用例:

运行结果:

就生成用例与结果看来,未有a=0 与b=0的状况,

而是以结果为正数,负数,0

覆盖率:

测试用例的生成通常以被生成的方法的结果为导向,

会将被测方法的每种if与输出结果的状况进行覆盖。

但不会全面覆盖方法中调用的方法。生成的测试

例只能辅助测试,并不能彻底取代人工,

测试用例的正确与否还需人工判断。


 
               
点个“在看”支持一下👇
使用插件进行生成测试用例publicclass demoTwoService {publicintMath(int a, int b) {if(a == 0) {System.out.println("运行1");return a;} elseif(b == 0) {System.out.println("运行2");return0;} else{System.out.println("运行3");return a/b;}}查看控制台:根据参数生成了执行命令查看生成用例结构与maven命令行生成同样publicclass TEST {publicintMath(int a, int b) {if(a == 0) {System.out.println("运行1");return0;} elseif(b == 0) {System.out.println("运行2");return b;} else{System.out.println("运行3");return a / b;}}publicintTest(int a, int b) {int aa = this.Math(a, b);System.out.println("结果"+ aa);return aa;}}



本公众号所有原创已整理成一个专栏,请在公众号里回复「 测试开发 」获取!


本文分享自微信公众号 - 测试开发社区(TestDevHome)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索