junit5单元测试自动生成最佳实践

简介: 在对比了几款插件后,最终选择了重新打造一套适合自己的插件。参看:【谈一谈单元测试】插件安装本地安装[文件: jcode5-1.0-SNAPSHOT.zip] 请在PC端预览或下载idea插件市场下载,搜索JCode5            插件使用插件有三个功能生成测试代码,也就是生成单元测试。生成json数据,通常用来生成测试数据,比如model。用来参数化测试。增加测试方法,随着业务开发,类可

在对比了几款插件后,最终选择了重新打造一套适合自己的插件。

参看:【谈一谈单元测试】

插件安装

  1. 本地安装

[文件: jcode5-1.0-SNAPSHOT.zip] 请在PC端预览或下载

  1. idea插件市场下载,搜索JCode5

            

插件使用

插件有三个功能

  1. 生成测试代码,也就是生成单元测试。
  2. 生成json数据,通常用来生成测试数据,比如model。用来参数化测试。
  3. 增加测试方法,随着业务开发,类可能增加一下功能方法,这个时候相应的可以增加测试方法

定位到需要测试的类,快捷键或菜单定位到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<String> stringList = JSONObject.parseArray(arg.getString("List<String>"),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<String>":[
		"test"
	]
}

3、补充判定语句

这一块前期考虑对于不同的方法有不同的校验,所以目前想的还是开发者自己去写验证代码。

注意事项

在自动生成完代码之后,虽然可以运行,但如我们前面提到的,为了写单元测试而写的单元测试是没什么价值的,我们的最终目的是为了写一个好的测试。代码自动生成,但它终究能力有限,所以还是需要我们自己再去验证,比如

  1. 该插件生成的代码需要junit5和mockito的支持,使用时需要引入相关的依赖
  2. 增加assert校验逻辑,看是不是想要的结果,目前插件不会自动生成assertEquals等断言代码。
  3. 运用参数化测试能力,复制一份生成的json文件并修改输入数据,多组测试

插件实现介绍

主要的实现思路,参考了dubbo的SPI的源码,也就是自动实现自适应SPI那部分,简单点说就是反射获取代码逻辑,然后生成测试代码。

后期规划

  1. mock数据可定制,目前的想法是
    1. 固定值比如目前的String: test、Integer和boolean: 0、1
    2. 测试者使用配置模版,比如txt文件包含keyValue对
    3. 使用Faker,对于name、email、phone这种特定倾向的数据进行特色自动生成
  2. 自动分支测试,这一块的想法目前主要针对if来做,需要一定的时间。
  3. 其他
目录
相关文章
|
1月前
|
IDE Java 测试技术
Junit 单元测试
JUnit是Java常用的单元测试框架,简化了测试用例的编写和执行。其特点包括简单注解、自动化测试、可扩展性、灵活性及与IDE的集成。使用方法涉及创建测试类、利用注解如@Test、@BeforeEach等管理测试生命周期,以及使用各种断言方法验证结果。此外,JUnit支持参数化测试以覆盖更多输入组合,并能与Maven、Gradle等构建工具集成,提升测试效率和项目管理。
40 1
|
2月前
|
安全 测试技术 UED
你知道SBTM(会话式测试管理)的最佳实践吗?
你知道SBTM(会话式测试管理)的最佳实践吗?
|
3月前
|
JavaScript 前端开发 Devops
负载测试的最佳实践
负载测试的最佳实践
|
3月前
|
安全 测试技术 数据库
安全测试的最佳实践
安全测试的最佳实践
|
19天前
|
Java 测试技术 程序员
junit单元测试
junit单元测试
|
3月前
|
SQL Java 数据库连接
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
【1月更文挑战第2天】 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
203 3
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
|
1月前
|
敏捷开发 数据管理 测试技术
深入探索软件测试:方法、挑战与最佳实践
【2月更文挑战第20天】 在数字化时代,软件已成为不可或缺的核心。确保软件的质量和可靠性,软件测试扮演着至关重要的角色。本文将深入探讨软件测试的各种方法,面临的挑战以及实施的最佳实践。我们将从单元测试的基础出发,逐步过渡到集成和系统测试,最后讨论自动化测试的策略。文章旨在为软件测试工程师提供深度洞见,帮助他们更有效地设计和执行测试计划,以确保软件产品的质量。
|
1月前
|
XML Java 测试技术
TestNG 与 JUnit 测试框架:哪个更好?
【2月更文挑战第16天】
48 1
TestNG 与 JUnit 测试框架:哪个更好?
|
2月前
|
运维 Java 测试技术
spring 单元测试 Junit
spring 单元测试 Junit
43 2
|
3月前
|
安全 测试技术 API
API测试清单和最佳实践
API测试清单和最佳实践
API测试清单和最佳实践