H2:构建单元测试的本地内存数据库

dao层的单元测试不能依赖测试环境的数据库以避免环境的影响,H2是一个内存数据库,支持标准SQL,相当于把数据库本地化,可以避免对测试环境的依赖,也可以提升单测的速度

SpringBoot与H2的整合

由于springBoot提供了H2的默认配置,如果使用是的springBoot则不需要新增h2的配置。默认配置如下:

43611799-b8c4-4780-955b-cb52f2065cc5.png

提示:如果不是基于SpringBoot的测试,则需要加上这几项配置

H2数据库初始化
由于h2是内存数据库,不能保存表结构,在每次测试环境准备的时候都要先初始化好需要用到的表结构。
我们在在test/resources目录下新建一个schema.sql文件,这个文件将在初始化数据源的时候被引用到。建表语句如下:

CREATE TABLE `User` (
  `AutoId` bigint(20) NOT NULL AUTO_INCREMENT,
  `UserId` bigint(20) NOT NULL COMMENT '用户Id',
  `UserName` varchar(64) NOT NULL COMMENT '用户姓名',
  `Age` int(10) NOT NULL COMMENT '年龄',
  `PointValue` int(11) NOT NULL DEFAULT '0' COMMENT '积分',
  `Status` smallint(6) NOT NULL DEFAULT '0' COMMENT '记录可用状态',
  `CreateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建日期',
  `LastModifyTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改日期',
  PRIMARY KEY (`AutoId`)
);

建表语句后面不能有ENGINE=InnoDB DEFAULT CHARSET=utf8,不然将会报错。
下面是初始化数据源的代码:

@Bean
    public DataSource h2DataSource(){

        EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
        EmbeddedDatabase database = builder.setType(EmbeddedDatabaseType.H2)
                        .addScript("classpath:schema.sql") ///启动时初始化建表语句
                        .build();
        return database;
    }

H2的pom依赖

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.195</version>
            <scope>test</scope>
        </dependency>

至此,H2的初始化完成,构建了一个基于H2的本地内存数据库,这样我们就实现了单元测试与测试环境数据库的解耦,零依赖。

更多内容欢迎关注个人微信公众号,一起成长!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值