闲话少说,直接上干货。
EvoSuite 官网:http://www.evosuite.org
开源代码:https://github.com/chenlinghong/evosuite
1、引入 maven 插件
<plugin>
<groupId>org.evosuite.pluginsgroupId>
<artifactId>evosuite-maven-pluginartifactId>
<version>${evosuite.version}version>
plugin>
其中,evosuite.version 建议查询官网最新版本。
2、引入evosuite依赖
<dependency>
<groupId>org.evosuitegroupId>
<artifactId>evosuite-standalone-runtimeartifactId>
<version>${evosuite.version}version>
<scope>testscope>
dependency>
3、编写测试方法
public String evosuite(int id, String name) {
if (id == 0 && "name".equals(name)) {
return "0#name";
}
if (id > 0) {
name = "name 1";
} else {
name = "name -1";
}
return "0#" + name;
}
4、执行命令生成测试用例
mvn compile evosuite:generate -Dcores=4 -DmemoryInMB=8000 -DtimeInMinutesPerClass=3 -DspawnManagerPort=63040 -Dcuts=club.chenlinghong.dem.evosuite.EvosuiteDemo evosuite:export -DtargetFolder=src/test/java/evo
主要参数说明:
evosuite:generate 生成测试用例,默认路径为根目录下 .evosuite 文件夹下 best-tests
cores: 分配 CPU 核数,可以理解为任务进程数
memoryInMB: 分配内存空间
cuts: 需要生成单元测试的源代码,不填默认整个项目
evosuite:export 导出文件
targetFolder 目标路径
如果是生成整个项目测试用例代码,直接运行:
mvn evosuite:generate
5、查看生成的测试用例
根据命令指定的目录下,即可生成测试用例代码
@RunWith(EvoRunner.class)
@EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, separateClassLoader = true, useJEE = true)
public class EvosuiteDemo_ESTest extends club.chenlinghong.demo.evosuite.EvosuiteDemo_ESTest_scaffolding {
@Test(timeout = 4000)
public void test0() throws Throwable {
EvosuiteDemo evosuiteDemo0 = new EvosuiteDemo();
String string0 = evosuiteDemo0.evosuite((-803), "");
assertEquals("0#name -1", string0);
}
@Test(timeout = 4000)
public void test1() throws Throwable {
EvosuiteDemo evosuiteDemo0 = new EvosuiteDemo();
String string0 = evosuiteDemo0.evosuite(0, "oame");
assertEquals("0#name -1", string0);
}
@Test(timeout = 4000)
public void test2() throws Throwable {
EvosuiteDemo evosuiteDemo0 = new EvosuiteDemo();
String string0 = evosuiteDemo0.evosuite(0, "name");
assertEquals("0#name", string0);
}
@Test(timeout = 4000)
public void test3() throws Throwable {
EvosuiteDemo evosuiteDemo0 = new EvosuiteDemo();
String string0 = evosuiteDemo0.evosuite(343, "0#name");
assertEquals("0#name 1", string0);
}
}
可以看到,生成的测试用例代码满足 Junit 规范,并采用了 Mockito 框架进行 mock数据。
evosuite 支持 IDEA 插件直接生成测试用例代码
1、安装 EvoSuite Plugin
2、重启 IDEA
3、执行代码
找到任意一个 java 文件,然后右键,即可看到 Run EvoSuite
点击即可看到参数选项,配置上刚才所说的几个参数即可: