单元测试遵守3A原则(Arrange, Act, Assert)即准备,执行,验证。
在准备测试数据时,若是使用硬编码进行new 对象,修改数据等操作。会遇到几个问题:测试数据的维护性不好,不方便管理,不够直观,数据可重用性低,对比字段多时不方便验证。因此测试数据需要从硬编码中分离出来,使用文档管理。 CSV简洁方便,二进制,支持多种格式编辑,支持excel,libreoffic编辑,数据版本易于维护。
在assert验证期间,当一个对象的属性很多时,Assert.assertEquals()过程中部分人为了麻烦,只是验证部分重要数据,这会造成验证数据的不完整性。为了避免重复这种比较操作,需要把此部分提取出来,作为模块运行。
csv测试框架实现:
csv格式(title列,必需与数据库字段相同,实体对象属性相似)
unitTest id account amount
before 1 张三 20
after 1 张三 30
before测试准备数据,after执行后进行的验证数据
核心类
testDataContext:测试数据载体
public String tableName;
public String idColumn;
public String dbType;
public String csvPath;
public String csvCharset;
public String[] classNameArray;
public String[] columnNameArray;
public Map<Long, Map<String, String>> beforeCsvDataTestMap;
public Map<Long, Map<String, String>> afterCsvDataTestMap;
testDataManager:测试数据的加载维护管理
loadTestDataCsv(String csvPath, TestDataContext dataContext) ;