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

作者|高嘉怡

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

通过使用此自动测试工具能够在保证代码覆盖率的前提下极大地提高测试人员的开发效率。但是只能辅助测试,并不能完全取代人工,测试用例的正确与否还需人工判断。

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

Evosuite的配置与使用

maven -- EvoSuite插件

1、pom.Xml配置

配置 junit 版本

<dependencies>

<dependency>

<groupId>junitgroupId>

<artifactId>junitartifactId>

<version>4.12version>

dependency>

配置evosuite 插件:

<build>

<plugins>

<plugin>

<groupId>org.evosuite.pluginsgroupId>

<artifactId>evosuite-maven-pluginartifactId>

<version>1.0.6version>

plugin>

plugins>

build>

<dependency>

<groupId>org.evosuitegroupId>

<artifactId>evosuite-standalone-runtimeartifactId>

<version>1.0.6version>

<scope>compilescope>

dependency>

2、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

0497e1ffb990ff804f0420f83f9cfe3a.png

控制台执行:

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

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

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

demoService_ESTest:测试用例文件

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

bb41fa04b6ca61d68b3131eb6509c05b.png

注意:

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

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

原因:evosuite:export 通过用“导出”,将生成的测试复制

到另一个文件夹,(根据自身情况)导出后对package 与

import需要手动调整

3039a54d1b59a96180218a54a4230455.png

查看运行结果

Example 1:被测试内容demoTwoService.java

mvn  compile  evosuite:generate  -Dcuts

=demoTest.testService.demoTwoService 

69efc6626d01d9930d2e9d28bbf2f804.png

生成测试方法case:

9c0737fb151557d8d248b547ec6dd0a4.png

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

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

f27a3d5896a534f5b9a4fc502fd735e4.png

2、重启IDEA

3、打开idea选择文件右键,就可以看见Run EvoSuite

c481100177cf4666ce1de5b7d65f00f0.png

4、点击Run EvoSuite 可以看见参数输入框

2d8915450895ec504c87423d74cde78b.png

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

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

c195eb6fbaa67226390c485c14fd8294.png

Example 2:被测试内容demoService

使用插件进行生成测试用例

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;

}

}

查看控制台:根据参数生成了执行命令

025976d3b03f5867409c5e27b3d35c0b.png

查看生成用例结构与maven命令行生成一样

37302dfebe81b00a07103f9b5c1ee3fe.png

生成的测试用例:

921156dd8e78884c898244665cb035b0.png

覆盖率:

cc5559b7f12b574deed6e5e9482c7385.png

使用EvoSuite的几种情况

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

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

被测试内容如下:

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;

}

}

生成测试用例

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

025c852641f96b3d6c35cbd9058c7fd3.png

运行Test方法的用例:

dd945b04b9f8653a63eaa6160e6fd6e3.png

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

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

覆盖率为84%

b7593f02c632350f813c5c7883ba5763.png

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

bea16f02adbea6ebb680421b3277104d.png

生成测试用例:

29f5da6e2393d15973ddbc193e1695b8.png

运行结果:

128ce63c9253790d3c7a05c4ce01c3ba.png

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

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

覆盖率:

ec9ece659ed2e5e72003751947061a95.png

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

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

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

用例只能辅助测试,并不能完全取代人工,

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

a18ba4408479c878414392bb64d006c3.png

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

fcde8c3ecde185adefbd8d4e8d5eac6f.png

点个“在看”支持一下?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值