EvoSuite生成单元测试用例
一、Maven中pom.xml配置
以IDEA+Maven为例:
修改maven中pom.xml文件如下(不唯一)
1 |
|
二、使用 EvoSuite 生成测试用例的步骤
将要被测试的类放置在 src/main/java 文件夹下
在终端窗口命令行输入如下指令:
mvn compile -DmemoryInMB=2000 -Dcores=2 -Dcriterion=line:branch
-DtargetFolder=src/test/java/evosuite evosuite:generate evosuite:export
简单说明下各个参数含义:
compile 表示编译。因为 evosuite 也是基于编译后的.class 文件生成用例的, 所以需要先编译。
-DmemoryInMB=2000 表示使用 2000MB 的内存 -Dcores=2 表示用 2 个 cpu 来并行加快生成速度
-Dcriterion=line:branch 表示覆盖准则选择
这里定义分支、语句覆盖准则 可以定义不止一个覆盖准则,用:隔开就行
-DtargetFolder=src/test/java/evosuite 表示生成的用例放到 src/test/java/evosuite
evosuite:generate 表示执行生成用例
evosuite:export 表示导出用例到 targetFolder 的值所在的目录中
用时 9.846s 成功运行, EvoSuite 生成的自动测试用例,部分截图如下所示:
运行 evosuite 生成的 ArrayUtils_ESTest 测试用例, 可以成功运行,如下图所示:
三、一些问题
从使用 Evosuite 生成测试的结果来看,会生成两份文件,ArrayUtils_ESTest.java 包含单测用例,ArrayUtils _ESTest_scaffolding.java 用例基类,用来在测试前初始化 Evosuite 的沙盒环境。这次使用的覆盖率还挺高的,两种覆盖准则(分支、语句覆盖)下都达到了100%的覆盖率。
当然,覆盖率并不代表全部,更重要的是测的内容。可以看到,有时它没有校验正常逻辑(多个用例会用来校验 null 或者非法参数,唯独缺少正常场景),而且 Evosuite 生成测试用例比较随机,有些方法显然更需要被测试,但是它可能只给了一个用例,显然不够充分。
总的来说,Evosuite 更适用于测试边界情况和异常情况,确实是能省很多力,工具生成的用例也确实有效,是有用的,在正常场景下还是人工更靠谱。 不过由于我使用时间短、对软件测试领域的了解也很有限,也不排除是我对该工具使用不熟练的原因。
(Evosuite运行生成的.evosuite/tmp_2023_01_07_19_42_43/logs/test/std_out_CLIENT.log截图)
如果你感觉读后有收获,可以点击下方打赏请作者喝杯咖啡。