java 單元測(cè)試 對(duì)h2數(shù)據(jù)庫(kù)數(shù)據(jù)清理方式
java 單元測(cè)試 對(duì)h2數(shù)據(jù)庫(kù)數(shù)據(jù)清理
前因
寫測(cè)試框架的時(shí)候使用的精簡(jiǎn)測(cè)試框架不需要啟動(dòng)整個(gè)springboot,并不支持@Transactional測(cè)試后回滾h2數(shù)據(jù)庫(kù),而是在基礎(chǔ)測(cè)試類里聲明cleandb函數(shù)供使用,這就需要適配任意表的數(shù)據(jù)清除,不過(guò)更推薦不清理,以方法名為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è)試方法超過(guò)7,java.sql.Connection無(wú)法獲取連接導(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ù)庫(kù)
首先導(dǎo)入H2內(nèi)存數(shù)據(jù)庫(kù)
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ù)庫(kù))
SET MODE Oracle;
INIT_TABLE.sql (單元測(cè)試需要的數(shù)據(jù)庫(kù)表初始化)
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)備完畢
下面來(lái)寫個(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)文章
SpringBoot 鉤子接口的實(shí)現(xiàn)代碼
本文主要介紹了SpringBoot 鉤子接口,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08
Java躲不過(guò)設(shè)計(jì)模式的坑之代理模式詳解
設(shè)計(jì)模式看來(lái)更像是一種設(shè)計(jì)思維或設(shè)計(jì)思想,為你的項(xiàng)目工程提供方向,讓你的項(xiàng)目工程更加健壯、靈活,延續(xù)生命力。本文即將分享的是設(shè)計(jì)模式的其中一種:代理模式,感興趣的可以了解一下2022-09-09
MyBatis動(dòng)態(tài)SQL foreach標(biāo)簽實(shí)現(xiàn)批量插入的方法示例
這篇文章主要介紹了MyBatis動(dòng)態(tài)SQL foreach標(biāo)簽實(shí)現(xiàn)批量插入的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
詳解Spring?@Lazy注解為什么能破解死循環(huán)
這篇文章主要來(lái)和大家探討一下Spring中的@Lazy注解為什么能破解死循環(huán),文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以了解一下2023-07-07
Java 內(nèi)存模型中的happen-before關(guān)系詳解
這篇文章主要為大家介紹了Java 內(nèi)存模型中的happen-before關(guān)系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Spring Boot使用AOP在指定方法執(zhí)行完后執(zhí)行異步處理操作
這篇文章主要介紹了Spring Boot使用AOP在指定方法執(zhí)行完后執(zhí)行異步處理操作,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
Spring Boot 利用WebUploader進(jìn)行文件上傳功能
本文的重點(diǎn)是給大家介紹在Spring Boot項(xiàng)目中利用WebUploader如何進(jìn)行文件上傳,本文通過(guò)示例代碼給大家介紹,需要的朋友參考下吧2018-03-03

