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的本地內存數據庫,這樣我們就實現了單元測試與測試環境數據庫的解耦,零依賴。

更多內容歡迎關注個人微信公眾號,一起成長!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM