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

发表于:2017-7-17 10:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:技术进阶之路    来源:51Testing软件测试网采编

  dao层的单元测试不能依赖测试环境的数据库以避免环境的影响,H2是一个内存数据库,支持标准SQL,相当于把数据库本地化,可以避免对测试环境的依赖,也可以提升单测的速度
  SpringBoot与H2的整合
  由于springBoot提供了H2的默认配置,如果使用是的springBoot则不需要新增h2的配置。默认配置如下:

  提示:如果不是基于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的本地内存数据库,这样我们就实现了单元测试与测试环境数据库的解耦,零依赖。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号