java 單元測(cè)試 對(duì)h2數(shù)據(jù)庫數(shù)據(jù)清理方式
java 單元測(cè)試 對(duì)h2數(shù)據(jù)庫數(shù)據(jù)清理
前因
寫測(cè)試框架的時(shí)候使用的精簡測(cè)試框架不需要啟動(dòng)整個(gè)springboot,并不支持@Transactional測(cè)試后回滾h2數(shù)據(jù)庫,而是在基礎(chǔ)測(cè)試類里聲明cleandb函數(shù)供使用,這就需要適配任意表的數(shù)據(jù)清除,不過更推薦不清理,以方法名為id使數(shù)據(jù)不重復(fù)即可
try{ JdbcTemplate jdbcTemplate = 獲取DataSource結(jié)構(gòu),反射或加載Bean等都可以,不要對(duì)業(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()){ //若是測(cè)試類的測(cè)試方法超過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單元測(cè)試使用H2內(nèi)存數(shù)據(jù)庫
首先導(dǎo)入H2內(nèi)存數(shù)據(jù)庫
Junit4單元測(cè)試依賴。
<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") // 指定單元測(cè)試活動(dòng)所匹配的數(shù)據(jù)源 public class DataSourceConfig4Test { @Bean(name="dataSourceUtils") // 要和模擬的數(shù)據(jù)源名稱相對(duì)應(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 (單元測(cè)試需要的數(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 (不需要特殊方法時(shí),此不可忽略)
CREATE ALIAS TO_DATE FOR "com.mvn.task.one.Function.toDate";
INIT_DATA.sql (初始化測(cè)試數(shù)據(jù))
INSERT INTO TEST(ID,PARAM1,PARAM2,PARAM3,PARAM4) VALUES(100,'TEST1','TEST2','2','JKL');
至此H2部分準(zhǔn)備完畢
下面來寫個(gè)Junit4的單元測(cè)試類例子
@ActiveProfiles("testOne") // 需要和H2模擬的數(shù)據(jù)源對(duì)應(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單元測(cè)試完成,另外一個(gè)數(shù)據(jù)源單元測(cè)試重復(fù)以上步驟即可~
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringSecurity中的Filter Chain(過濾器鏈)
Spring Security的Filter Chain是由一系列過濾器組成的管道,每個(gè)過濾器執(zhí)行特定的安全功能,Spring Security能夠提供強(qiáng)大而靈活的安全控制機(jī)制,從而保護(hù)你的應(yīng)用程序不受各種網(wǎng)絡(luò)安全威脅的侵害,本文介紹SpringSecurity中的Filter Chain,感興趣的朋友跟隨小編一起看看吧2024-06-06通過實(shí)例深入學(xué)習(xí)Java的Struts框架中的OGNL表達(dá)式使用
這篇文章主要通過實(shí)例介紹了Java的Strus框架中的OGNL表達(dá)式使用,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-11-11深入理解Java基礎(chǔ)之try-with-resource語法糖
這篇文章主要介紹了深入理解Java基礎(chǔ)之try-with-resource語法糖,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02Java中八種基本數(shù)據(jù)類型的默認(rèn)值
這篇文章主要介紹了Java中八種基本數(shù)據(jù)類型的默認(rèn)值 的相關(guān)資料,需要的朋友可以參考下2016-07-07Spring ApplicationListener的使用詳解
這篇文章主要介紹了Spring ApplicationListener的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Java輕松使用工具類實(shí)現(xiàn)獲取wav時(shí)間長度
在Java中,工具類定義了一組公共方法,這篇文章將介紹Java中使用工具類來獲取一個(gè)wav文件的時(shí)間長度,感興趣的同學(xué)繼續(xù)往下閱讀吧2021-10-10