Yaml4test 单元测试反序列化工具

相关地址

Maven 仓库

Github 仓库

当前 Maven 引入方式:

<!-- https://mvnrepository.com/artifact/com.wujunhao1024/yaml4test -->
<dependency>
    <groupId>com.wujunhao1024</groupId>
    <artifactId>yaml4test</artifactId>
    <version>0.0.3</version>
</dependency>

介绍

实习期写的工具。

公司提倡敏捷开发,使用 Mock 进行单元测试,但是在编写单元测试时,并没有提供较好的组织存放测试用例数据的方案。(事实上好像没人写单测)

思考实现一种可以清晰展示测试用例所需对象的内容,具有高可读性,又能够快速转化投入到测试中去,不需要手动创建对象并赋值的方案。

我们知道在使用 Junit 时,执行顺序为:

  1. 静态方法块
  2. beforeClass()
  3. 方法块
  4. before()
  5. 测试方法
  6. after()
  7. afterClass()

如果有多个测试方法,则为如下:

  1. 静态方法块
  2. beforeClass()
  3. 方法块
  4. before()
  5. 测试方法A
  6. after()
  7. 方法块
  8. before()
  9. 测试方法B
  10. after()
  11. afterClass()

在单元测试中,可以选择在静态方法块或 beforeClass() 中执行本工具的启动逻辑。

本工具将会做如下事情:

  1. 调用启动方法,初始化相关类
  2. 查找测试类注解中路径下的对应 yaml 文件
  3. 根据 yaml 文件反序列化对象并缓存
  4. 检索当前测试类下带相关注解的属性,注入对象

对于单元测试所需的任何较为复杂的入参,都可以通过 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 文件。