最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 單元測試 對h2數(shù)據(jù)庫數(shù)據(jù)清理方式

 更新時間:2021年09月06日 09:38:21   作者:若不能同行_那么祝你一路順風  
這篇文章主要介紹了java 單元測試 對h2數(shù)據(jù)庫數(shù)據(jù)清理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

java 單元測試 對h2數(shù)據(jù)庫數(shù)據(jù)清理

前因

寫測試框架的時候使用的精簡測試框架不需要啟動整個springboot,并不支持@Transactional測試后回滾h2數(shù)據(jù)庫,而是在基礎(chǔ)測試類里聲明cleandb函數(shù)供使用,這就需要適配任意表的數(shù)據(jù)清除,不過更推薦不清理,以方法名為id使數(shù)據(jù)不重復(fù)即可

try{
      JdbcTemplate jdbcTemplate = 獲取DataSource結(jié)構(gòu),反射或加載Bean等都可以,不要對業(yè)務(wù)代碼侵入;
      Connection connection = jdbcTemplate.getDataSource().getConnection();//獲取連接
      ResultSet tables = connection.getMetaData().getTables(null, null, null, new String[]{"TABLE"});//獲取表名
      connection.close();//記得關(guān)閉連接,或者使用連接池
      while(tables.next()){
        //若是測試類的測試方法超過7,java.sql.Connection無法獲取連接導(dǎo)致死循環(huán)
        jdbcTemplate.update("DELETE FROM " + tables.getObject("TABLE_NAME"));
        //spring-test-5.2.1.RELEASE-sources.jar!\org\springframework\test\jdbc\JdbcTestUtils.deleteFromTables如果使用了springtest可以代替使用該方法
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }

junit單元測試使用H2內(nèi)存數(shù)據(jù)庫

首先導(dǎo)入H2內(nèi)存數(shù)據(jù)庫

Junit4單元測試依賴。

<dependency>
 <groupId>com.h2database</groupId>
 <artifactId>h2</artifactId>
 <version>1.4.185</version>
 <scope>test</scope>
</dependency>
<dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.11</version>
 <scope>test</scope>
</dependency

其次使用H2數(shù)據(jù)源模擬Oracle

@Component
@Profile("testOne") // 指定單元測試活動所匹配的數(shù)據(jù)源
public class DataSourceConfig4Test { 
    @Bean(name="dataSourceUtils") // 要和模擬的數(shù)據(jù)源名稱相對應(yīng)
    DataSource dataSourceUtils() throws SQLException {
        return new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.H2)
                .addScript("classpath:/H2_TYPE.sql")
                .addScript("classpath:/INIT_TABLE.sql")
                .addScript("classpath:/H2_FUNCTION.sql")
                .addScript("classpath:/INIT_DATA.sql")   
                .build();
    }
}

H2_TYPE.sql (設(shè)置H2所模擬的數(shù)據(jù)庫)

SET MODE Oracle;

INIT_TABLE.sql (單元測試需要的數(shù)據(jù)庫表初始化)

CREATE TABLE TEST
(
    ID      NUMBER(38,0) PRIMARY KEY NOT NULL, 
    PARAM1  VARCHAR2(6) NOT NULL,
    PARAM2 VARCHAR2(6) NOT NULL,
 PARAM3 VARCHAR2(1) NOT NULL,
 PARAM4 VARCHAR2(50) NOT NULL
);

H2_FUNCTION.sql (不需要特殊方法時,此不可忽略)

CREATE ALIAS TO_DATE FOR "com.mvn.task.one.Function.toDate";

INIT_DATA.sql (初始化測試數(shù)據(jù))

INSERT INTO TEST(ID,PARAM1,PARAM2,PARAM3,PARAM4)
VALUES(100,'TEST1','TEST2','2','JKL');

至此H2部分準備完畢

下面來寫個Junit4的單元測試類例子

@ActiveProfiles("testOne") // 需要和H2模擬的數(shù)據(jù)源對應(yīng)上
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:testspring/applicationContext-test-one.xml")
public class oneTest { 
 @Autowired
 private ITestService iTestService;
 @Test
 public void testBengin(){
     Test model = iSubcService.findTest("TEST1", "TEST2");
     Assert.assertNotNull(model);
 }
}

到此H2和Junit單元測試完成,另外一個數(shù)據(jù)源單元測試重復(fù)以上步驟即可~

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

广德县| 三门峡市| 阳山县| 嘉荫县| 定州市| 昭通市| 什邡市| 桦川县| 大足县| 山东| 益阳市| 昌邑市| 德阳市| 屏南县| 蒙自县| 仙游县| 沁阳市| 会泽县| 乃东县| 丹凤县| 临城县| 平陆县| 城市| 成安县| 屏东市| 图们市| 东山县| 辽源市| 都江堰市| 平山县| 五原县| 麻栗坡县| 阿合奇县| 精河县| 西宁市| 桂东县| 抚顺县| 镇远县| 邹城市| 武乡县| 海阳市|