zoukankan      html  css  js  c++  java
  • h2数据库

    使用h2数据库进行单元测试

    一、下载h2数据库

    官网:http://www.h2database.com/html/main.html
    下载完成后解压,找到bin目录下的h2.bat打开h2数据库
    添加参数jdbc:h2:~/test;AUTO_SERVER=TRUE
    如下图:

    输入用户名密码登入h2数据库
    打开完成后,右下角工具栏会出现h2的图标

    二、准备数据库文件

    1. 将之前的数据库导出为sql文件,使用数据传输功能导出为文件
    2. 将sql文件中有主外键关系的建表顺序修改合适,
    3. 文件头添加SET FOREIGN_KEY_CHECKS=0;来取消主外键的影响,(建表和插入)
    4. 删掉sql文件中的USING BTREE ,防止建表失败

    三、项目中配置h2

    1. pom.xml中配置maven
        <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
        <dependency>
          <groupId>com.h2database</groupId>
          <artifactId>h2</artifactId>
          <version>1.4.200</version>
          <scope>test</scope>
        </dependency>
    
    1. 新建testresources
    2. 将sql文件放入testresouces文件夹中
    3. 新建.proterties配置文件,配置其中的内容 ,这里使用的是jdbc.properties
    driver=org.h2.Driver
    url=jdbc:h2:mem:default;MODE=MySQL;INIT=RUNSCRIPT FROM 'classpath:uolab817.sql'
    username = root
    password = root
    

    注意 URL后面要加 jdbc:h2:~/test;AUTO_SERVER=TRUE AUTO_SERVER =TRUE
    多个进程可以访问同一个数据库,而不必手动启动服务器。为此,添加.....。无论数据库是否已经打开,您都可以使用相同的数据库网址。

    这里要说到一个单元测试时读取文件的机制:
    先从单元测试的目录文件资源testresoueces去找数据库连接文件 否则会回去找resources目录下的数据库连接文件

    四、配置junit5

    1. pom.xml中配置
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-engine</artifactId>
          <version>5.5.2</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.junit.platform</groupId>
          <artifactId>junit-platform-runner</artifactId>
          <version>1.5.1</version>
        </dependency>
    
    1. 新建AllTest()测试类
    @RunWith(JUnitPlatform.class)
    @SelectPackages("com.ychs.dao")
    @SelectClasses(
    //选择之后会按照顺序来执行
            {CollegeMapperTest.class,
            MajorMapperTest.class,
            ClazzMapperTest.class,
            MemberMapperTest.class,
            }
    public class AllTest {
    
    }
    
    1. junit5断言时使用Assertions而不是Assert
    2. 注意junit5的导包:
    import org.junit.jupiter.api.Assertions;
    import org.junit.jupiter.api.DisplayName;
    import org.junit.jupiter.api.Test;
    

    junit5提供了displayName来备注

    h2数据库不支持MySql的一些语法:

    // 不支持时间格式化format函数DATE_FORMAT(take_time,'%Y-%m') = #{takeTime},使用范围来代替
    take_date &gt;'${takeDate}-01' AND take_date &lt;'${takeDate}-31'
    

    如果连接数据库失败:

    1.注释掉test
    2.Maven的问题 打开repository文件夹 找到h2需要的jar包 在IDEA下面新建一个lib文件夹 将jar包粘贴 并在工程结构中重构。再执行
    断言 不管插入多少条 永远是1 但如果用MySQL 不断向数据库插入信息,无法保证断言时存在的值是否为1
    @before
    @after 来恢复原始数据库内容
    最后运行时要运行整个test类 实现执行完整个测试文件断言全部显示为1.

    h2数据库在每次获得一个新的session时,都会删库,新建库,用h2数据库测试时不要关闭session

    工具类应该如下:

    package com.ychs.util;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    /**
     * copyright(c)2020 YCKJ.ALL rights Reserved
     * <p>
     * 描述: session 工具类
     *
     * @author caoning
     * @version 1.0
     * @date 2020.7.23
     */
    public class Dbutil {
        private static Logger logger = LogManager.getLogger(Dbutil.class);
        static SqlSessionFactory sqlSessionFactory = null;
        private static SqlSession session = null;
        //静态初始化块,只执行一次
        static {
            String resource = "mybatis-config.xml";
            InputStream inputStream = null;
            try {
                inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                logger.error("初始化数据库连接失败", e);
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
    
                }
            }
        }
    
        public static SqlSession getSession() {
            if(session != null){
                return session;
            } else if (sqlSessionFactory != null) {
                session = sqlSessionFactory.openSession();
                return session;
            } else {
                return null;
            }
        }
    
    }
    
  • 相关阅读:
    Struts2SpringHibernate整合示例,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)
    Java实现蓝桥杯勇者斗恶龙
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 224 基本计算器
    Java实现 LeetCode 224 基本计算器
  • 原文地址:https://www.cnblogs.com/cn9826/p/13500409.html
Copyright © 2011-2022 走看看