使用H2数据库进行单元测试
2024-10-11 05:56:53
背景
H2 数据库是一个开源的嵌入型内存数据库,采用纯Java语言实现;
程序非常小巧轻便,整个完整的Jar包也只有1.5M左右,很容易集成到项目中。
官网地址
http://www.h2database.com/html/main.html
在数据存储的场景中,为什么会使用内存数据库?常见的出发点可能有:
- 计算资源限制,如嵌入式计算环境中,由于CPU、内存、Disk等限制,要求采用小巧的数据库存储方案;
- 项目预研,在项目立项之前可能无法立即采购昂贵的数据库软件,此时往往可以退而选择临时解决方案,利用JDBC协议的通用性在后期完成切换;
- 自动化测试,在自动化环境中可能需要大量模拟接口,包括数据存储接口,此时内存数据库是不二之选。
单元测试的场景也属于自动化测试,下面主要阐述H2 数据库在项目单元测试中的典型应用。
单元测试的痛点
一个 Junit单元测试的流程包括
- 初始化数据
- 执行测试
- 销毁数据
在真实的测试代码开发中,有几类问题会造成困扰:
数据库环境的搭建
搭建一套完整的数据库往往比较耗时,然而一旦将数据库配置加入测试范围,就必须长期维护其稳定性;
这同时也会带来代码库同步的困扰。保证数据库的"干净"
大多数情况下,每个测试用例在启动前(初始化数据)都期望数据库是"干净"的状态;然而使用真实的数据库却很难保证这点,原因是:- 多个应用可能会共享一个物理数据库;
- 测试用例在销毁数据时很难保证完全清除,可能一次意外的调试也会产生垃圾数据;
H2内存数据库很好的解决了上述问题,本身作为嵌入式数据库并不需要额外的看护成本;在程序退出时,所有数据都能保证完全清除。
如何使用
maven 依赖
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.190</version>
<scope>test</scope>
</dependency>
在springboot 使用H2数据库非常方便:
application.properties
# 数据源连接
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.driver-class-name=org.hsqldb.jdbcDriver
spring.datasource.username=root
spring.datasource.password=
# DDL脚本
spring.datasource.schema=classpath:script/test-schema.sql
# DML脚本
spring.datasource.data=classpath:script/test-data.sql
最新文章
- Hadoop开发第4期---分布式安装
- Java——private default protected public访问控制权限
- 使用 Fiddler2 进行接口测试的方法
- 【GOF23设计模式】原型模式
- 部署在IIS服务器的asp.net 网站,禁止访问指定类型文件
- 能在你离开时照顾你的宠物的3D打印机器人
- ps批量修改图片
- SharePoint 2010 产品六大功能模块
- CSS sprites减少HTTP请求
- windowsxp系统下SVN添加新用户
- 网络协议 2 - IP 是怎么来,又是怎么没的?
- 《程序员的自我修养》读书笔记——系统调用、API
- webService的介绍与简单使用
- Spring Boot + Spring Cloud 构建微服务系统(十):配置中心(Spring Cloud Bus)
- nodejs初识
- javascript中IE浏览器不支持NEW DATE()带参数的解决方法
- logstash实战input插件syslog
- form表单元素中disabled的元素的值不会提交到服务器
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly Detection&;Recommender Systems
- MYSQL数据库索引类型都有哪些?
热门文章
- Java中的集合框架(下)
- Flask框架
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)
- Angular17 Angular自定义指令
- 51Nod 1289 大鱼吃小鱼(模拟,经典好题)
- POJ 3624 Charm Bracelet(01背包裸题)
- ES5.0集群搭建
- c++(八皇后)
- 一对多(多对一)关系中的inverse和cascade属性
- dedecms织梦首页如何调用文章列表?