zoukankan      html  css  js  c++  java
  • 使用H2数据库进行单元测试

    背景

    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
    
  • 相关阅读:
    观念真的非常重要
    POJ 2031 prim
    在asp.net mvc中使用PartialView返回部分HTML段
    JavaScript实现获取table中某一列的值
    poj2533--Longest Ordered Subsequence(dp:最长上升子序列)
    74HC595的中文资料
    cocos 事件分发2
    从二叉搜索树到平衡二叉搜索树
    Opencv中integral计算积分图
    函数多个“返回值”
  • 原文地址:https://www.cnblogs.com/littleatp/p/6937917.html
Copyright © 2011-2022 走看看