背景

H2 数据库是一个开源的嵌入型内存数据库,采用纯Java语言实现;

程序非常小巧轻便,整个完整的Jar包也只有1.5M左右,很容易集成到项目中。

官网地址

http://www.h2database.com/html/main.html

在数据存储的场景中,为什么会使用内存数据库?常见的出发点可能有:

  1. 计算资源限制,如嵌入式计算环境中,由于CPU、内存、Disk等限制,要求采用小巧的数据库存储方案;
  2. 项目预研,在项目立项之前可能无法立即采购昂贵的数据库软件,此时往往可以退而选择临时解决方案,利用JDBC协议的通用性在后期完成切换;
  3. 自动化测试,在自动化环境中可能需要大量模拟接口,包括数据存储接口,此时内存数据库是不二之选。

单元测试的场景也属于自动化测试,下面主要阐述H2 数据库在项目单元测试中的典型应用。

单元测试的痛点

一个 Junit单元测试的流程包括

  1. 初始化数据
  2. 执行测试
  3. 销毁数据

在真实的测试代码开发中,有几类问题会造成困扰:

  1. 数据库环境的搭建

    搭建一套完整的数据库往往比较耗时,然而一旦将数据库配置加入测试范围,就必须长期维护其稳定性;

    这同时也会带来代码库同步的困扰。

  2. 保证数据库的"干净"

    大多数情况下,每个测试用例在启动前(初始化数据)都期望数据库是"干净"的状态;然而使用真实的数据库却很难保证这点,原因是:

    • 多个应用可能会共享一个物理数据库;
    • 测试用例在销毁数据时很难保证完全清除,可能一次意外的调试也会产生垃圾数据;

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

使用H2数据库进行单元测试的更多相关文章

  1. java~springboot~h2数据库在单元测试中的使用

    单元测试有几点要说的 事实上springboot框架是一个tdd框架,你在进行建立项目时它会同时建立一个单元测试项目,而我们的代码用例可以在这个项目里完成,对于单元测试大叔有以下几点需要说明一下: 单 ...

  2. Spring单元测试集成H2数据库

    项目源代码在:Spring-H2测试 H2简介 H2数据库是一种由Java编写的,极小,速度极快,可嵌入式的数据库.非常适合用在单元测试等数据不需要保存的场景下面. 以下时其官网的介绍: {% blo ...

  3. 查看Jira 使用的H2数据库 数据结构以及内容的方法

    1. 同事在研究jira 想看看jira的数据库 数据结构, 告知使用的是java的H2数据库. 如图示 2. 然后根据此内容 进行百度等. 下载 可以进行数据库连接的工具,主要找到两个,下载地址分别 ...

  4. springboot09 事务 H2数据库

    一.事务 1. 事务介绍 事务可以包含多个操作步骤 , 如果有一个步骤失败,那么这一组都以失败告终. 事务是指包含多个微小逻辑单元的一组操作, 只要其中有一个逻辑失败了,那么这一组操作就全部以失败告终 ...

  5. H2 数据库使用简介

    博客地址:http://www.moonxy.com 一.前言 H2 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,即只有一个 jar 文件,可以直接嵌入到应用项目中.H2 主要有如下三 ...

  6. H2数据库介绍

    H2数据库是一个开源的关系型数据库. H2是一个采用java语言编写的嵌入式数据库引擎,只是一个类库(即只有一个 jar 文件),可以直接嵌入到应用项目中,不受平台的限制 应用场景: 可以同应用程序打 ...

  7. H2数据库攻略

    H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容.H2还提供兼容模式,可以兼容一些主流的数据库,因此采用H2作为 ...

  8. 【树莓派】h2数据库操作相关

    之前在树莓派上面操作时候,遇到一些业务方面的bug,和团队中的同事经过多次尝试,但就是难以重现用户现场的问题. 但是问题却实实在在地发生,虽然并不是必然可重现的bug,但是也比较闹心: 发生了问题,也 ...

  9. Confluence 6 嵌入的 H2 数据库

    为了让你的 Confluence 在安装成功后就可以使用而不需要使用任何外部的数据库,Confluence 使用一个嵌入的 H2 数据库. 当你选择对 Confluence 进行评估和测试的时候,H2 ...

随机推荐

  1. 一次Oracle宕机切换后产生ORA错误的处理过程

    问题背景 机房意外断电后Oracle主服务器启动失败,Oracle备机接管 为了安全,管理员对于数据库做expdp的逻辑备份.但备份时发现AttributeInstance表备份失败,提示ORA-01 ...

  2. windows service编程

    1 基本概念 1.1windows服务简介 创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序. 这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面. 1. ...

  3. sass 安装

    最近在安装sass的过程中遇到 了一下问题,总结一下安装过程. windows下sass的安装是依赖于ruby的,所以要先安装rubyinstaller,下载地址:https://rubyinstal ...

  4. node.js和express创建服务器

    创建web服务器 一. 使用node.js创建服务器. 使用express创建http服务. 监控服务器的变化. 二. 初始化配置文件:npm init -y 使用typescript编写,导入nod ...

  5. [国嵌攻略][071][Coredump故障分析]

    Core Dump定义 Core Dump又叫核心转存.当程序在运行过程中发生异常,Linux系统可以把程序出错时的内存内容存储在一个core文件中,这个过程叫Core Dump. Core Dump ...

  6. HDU 2063 过山车(模板—— 二分图最大匹配问题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2063  解题思路: 二分图最大匹配模板题. AC代码: #include<stdio.h> ...

  7. HDU 2544 最短路(模板题——Floyd算法)

    题目: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你 ...

  8. 科普:String hashCode 方法为什么选择数字31作为乘子

    1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主 ...

  9. Linux包管理器

    按Linux系统分类 Redhat系列:Redhat(本身就是Centos).Centos.Fedora等,采用Dpkg包管理器 Debian系列:Debian.Ubuntu等,使用RPM包管理器 R ...

  10. Django框架之正则表达式URL误区

    问题:我学习的视频大概是2015年录的,里面用的Django版本比较老关于正则表达式URL这一块都是用的url("url(r'^admin/', admin.site.urls)," ...