单元测试是开发流程中很重要的环节,无论测试驱动还是集成测试,unit test的相关技术都会涉及到。

在测试过程中,数据的稳定是个很重要的保证,除了模拟数据、测试数据,通过内存数据库即时生成、擦除数据也是可选项。

内存测试数据库,主要还是H2,可以方便的集成到应用中,1.3.X版本也不到2MB,在打包阶段还可以去掉。

实际上应用H2作为内存数据库,还是存在一些问题需要去一一解决,例如:

·H2和Mysql的语法差异

·Mysql数据导入到H2的过程

·H2本身的配置问题

这些差异会对实际测试带来一些影响,比如迁移测试用例到H2上时,需要对差异带来的问题进行解决。

  1. 语法支持差异

例如创建表:

在Mysql下的CURRENT_TIMESTAMP命令H2并不支持,需要调整成:

default NOW();

 

2.数据导出

导入导出,需要考虑格式和编码的问题,可以使用IntelljIdea的数据源工具,进行DDL以及CSV格式文件的导出,然后通过H2的csvread命令导入:

导出的CSV数据,需要带上head,例如:

3.H2的本身配置

· 如果原数据源是Mysql的,那针对H2要开启Mysql mode.

· 1.3版本,可以开启MVCC=true,解决事务下单线程锁表未释放问题。

 

我觉得主要是这三个方向存在一些注意事项,其他的就是应用本身的配置、SQL数据脚本组织的问题了。

优点:

· 测试数据稳定,通过CSV文件,方便编辑,结合git后,变更记录一目了然。

·测试效率提升,数据文件可以整体导入,也可以分单个用例进行导入,避免Mock构造大量数据的问题,也避免了反复查询数据库带来的性能开销。

在如今很多系统服务化后,服务的开发、测试,结合内存数据库,保证单元测试稳定以及高效率回归,是个不错的方案。

发表评论

电子邮件地址不会被公开。 必填项已用*标注