内容
隐藏
相关地址
当前 Maven 引入方式:
<!-- https://mvnrepository.com/artifact/com.wujunhao1024/yaml4test --> <dependency> <groupId>com.wujunhao1024</groupId> <artifactId>yaml4test</artifactId> <version>0.0.3</version> </dependency>
介绍
实习期写的工具。
公司提倡敏捷开发,使用 Mock 进行单元测试,但是在编写单元测试时,并没有提供较好的组织存放测试用例数据的方案。(事实上好像没人写单测)
思考实现一种可以清晰展示测试用例所需对象的内容,具有高可读性,又能够快速转化投入到测试中去,不需要手动创建对象并赋值的方案。
我们知道在使用 Junit 时,执行顺序为:
- 静态方法块
- beforeClass()
- 方法块
- before()
- 测试方法
- after()
- afterClass()
如果有多个测试方法,则为如下:
- 静态方法块
- beforeClass()
- 方法块
- before()
- 测试方法A
- after()
- 方法块
- before()
- 测试方法B
- after()
- afterClass()
在单元测试中,可以选择在静态方法块或 beforeClass() 中执行本工具的启动逻辑。
本工具将会做如下事情:
- 调用启动方法,初始化相关类
- 查找测试类注解中路径下的对应 yaml 文件
- 根据 yaml 文件反序列化对象并缓存
- 检索当前测试类下带相关注解的属性,注入对象
对于单元测试所需的任何较为复杂的入参,都可以通过 yaml 文件快速获取。
在被测方法实现之前,先编写测试用入参存放在 yaml 文件中。在单元测试时直接传入实例化的入参并进行结果验证,可以省略方法所需入参的创建和赋值过程,并保证单测用例是规范的。
Yaml 格式说明
本工具基本遵循 yaml 官方给出的格式,但以实例化类对象为主(基本类型直接创建就可以了,不需要反序列化)。
反序列化自定义类对象时,需要在对象名后标记 “!类名”。
注意:类的结构和 yaml 文件的结构是对应匹配的。yaml 结构和类结构不匹配时,实例化可能会无法满足预期(不在 yaml 文件中填写的属性,实例化时会自动跳过并赋默认值)。
目前支持以下结构即其嵌套组合形式,能满足很多类结构的需求:
- 纯量(自动转换 Java 常用封装类型)
- 集合(目前只包含 Array,不支持 List)
- 类(三种类型自由嵌套组合)
# 举例 对象名: !类名(非根路径下,需要带文件夹路径) 属性1是字符串: String 属性2是整型: 1 属性3是基本类型的集合: - 集合内元素1 - 集合内元素2 属性4是类的集合: - !类名 集合中类对象A的属性1: 1000.00 集合中类对象A的属性2: 100.0L - !类名 集合中类对象B的属性1: 2000.00 集合中类对象B的属性2: 200.0L
其他具体功能请参考 github 中 README.md 文件。