在对比了几款插件后,最终选择了重新打造一套适合自己的插件。
插件安装
-
本地安装
[文件: jcode5-1.0-SNAPSHOT.zip] 请在PC端预览或下载
-
idea插件市场下载,搜索JCode5
插件使用
插件有三个功能
-
生成测试代码,也就是生成单元测试。
-
生成json数据,通常用来生成测试数据,比如model。用来参数化测试。
-
增加测试方法,随着业务开发,类可能增加一下功能方法,这个时候相应的可以增加测试方法
定位到需要测试的类,快捷键或菜单定位到generater,如下,选择JCode5.
1、生成测试类
目前支持三个选项,后续会逐渐完善
另外两个功能类似,直接尝试使用一下就行。
2、生成的结果---类+json数据
@ParameterizedTest
@ValueSource(strings = {"/com/cq/common/JCode5/testExtend.json"})
public void testExtendTest(String str) {
JSONObject arg= TestUtils.getTestArg(str);
Integer i = arg.getInteger("Integer");
// 识别泛型活着集合类
List stringList = JSONObject.parseArray(arg.getString("List"),String.class);
String stringArg = arg.getString("String");
String stringArg1 = arg.getString("String");
String stringArg0 = arg.getString("String");
// 识别四个方法,包括父类调用、其他方法调用
when(testService.testBase(any(Integer.class))).thenReturn(stringArg);
when(testService.testMuti(any(List.class),any(Integer.class))).thenReturn(stringList);
when(testService.getStr(any(Integer.class))).thenReturn(stringArg0);
when(testService.testOther(any(Student.class))).thenReturn(stringArg1);
jCode5.testExtend(i);
//todo verify the result
}
如上除了生成基本的代码,另外会生成测试数据,它会将该方法所需要的测试数据全都生成在一个json文件当中,完全实现
“数据和代码的分离”
如testExtend.json:
{
"Integer":1,
"String":"test",
"List":[
"test"
]
}
3、补充判定语句
这一块前期考虑对于不同的方法有不同的校验,所以目前想的还是开发者自己去写验证代码。
注意事项
在自动生成完代码之后,虽然可以运行,但如我们前面提到的,为了写单元测试而写的单元测试是没什么价值的,我们的最终目的是为了写一个好的测试。代码自动生成,但它终究能力有限,所以还是需要我们自己再去验证,比如
-
该插件生成的代码需要junit5和mockito的支持,使用时需要引入相关的依赖
-
增加assert校验逻辑,看是不是想要的结果,目前插件不会自动生成assertEquals等断言代码。
-
运用参数化测试能力,复制一份生成的json文件并修改输入数据,多组测试
插件实现介绍
主要的实现思路,参考了dubbo的SPI的源码,也就是自动实现自适应SPI那部分,简单点说就是反射获取代码逻辑,然后生成测试代码。
后期规划
-
mock数据可定制,目前的想法是
-
固定值比如目前的String: test、Integer和boolean: 0、1
-
测试者使用配置模版,比如txt文件包含keyValue对
-
使用Faker,对于name、email、phone这种特定倾向的数据进行特色自动生成
-
-
自动分支测试,这一块的想法目前主要针对if来做,需要一定的时间。
-
其他