springboot集成測(cè)試最小化依賴實(shí)踐示例
簡(jiǎn)介
想要代碼跑的穩(wěn), 集成測(cè)試還是必不可少的, 不然出現(xiàn)開發(fā)環(huán)境正常, 集成環(huán)境各種問題就坑爹了。
當(dāng)前項(xiàng)目對(duì)外提供各種rest接口, 通過RestTemplate做接口測(cè)試, 同時(shí)需要注入一些SpringBean, 如何使用SpringBootTest又不需要啟動(dòng)整個(gè)容器?
版本及依賴引入
springboot版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>項(xiàng)目部分依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>直接使用SpringBootTest方式
代碼示例
@RunWith(SpringRunner.class)
// 默認(rèn)啟動(dòng)容器
@SpringBootTest
public class BdgResourceITest {
@Autowired
@Qualifier(value = "iTestRestTemplate")
private RestTemplate restTemplate;
@Test
public void testPull() throws URISyntaxException {
// /pull/{mof_div_code}/{fiscal_year}/{agency_code}
String url = "/api/pull/340000000/2022/001001";
final ResponseEntity<ResponseData> exchange = restTemplate.exchange(
RequestEntity.get(new URI(url)).build(), ResponseData.class);
Assert.isTrue(exchange.getStatusCode().equals(HttpStatus.OK), "本單位數(shù)據(jù)獲取異常");
}
}場(chǎng)景及優(yōu)劣
優(yōu)勢(shì)
如果是測(cè)試類中大量引入了依賴, 這種情況下直接啟動(dòng)容器比較方便, 不過集成測(cè)試個(gè)人感覺從入口訪問即可, 這種嵌套比較深的建議使用單元測(cè)試
劣勢(shì)
當(dāng)前項(xiàng)目中測(cè)試代碼需要依賴很少, 極端情況下只用restTemplate即可, 根本沒必要啟動(dòng)容器, 而且啟動(dòng)容器占用了大量時(shí)間
項(xiàng)目中使用了ehcache3.x作為本地緩存, 啟動(dòng)容器后因?yàn)槲募i無法測(cè)試, 如果單獨(dú)指定ehcache.xml配置, 又會(huì)產(chǎn)生新的垃圾, 所以果斷減少依賴
最小化依賴方案
代碼
@RunWith(SpringRunner.class)
// 指定class就不啟動(dòng)容器了
@SpringBootTest(classes = BdgResourceITest.class)
@Import(value = {ITestRestTemplateConfigurer.class})
// 激活 main 中resources下的test profile
//@ActiveProfiles("dev")
// 加載測(cè)試目錄resources下的application.yml文件
//@TestPropertySource(properties = {"spring.config.location=classpath:application.yml"})
public class BdgResourceITest {
@Autowired
@Qualifier(value = "iTestRestTemplate")
private RestTemplate restTemplate;
@Test
public void testPull() throws URISyntaxException {
// /pull/{mof_div_code}/{fiscal_year}/{agency_code}
String url = "/api/pull/340000000/2022/001001";
final ResponseEntity<ResponseData> exchange = restTemplate.exchange(
RequestEntity.get(new URI(url)).build(), ResponseData.class);
Assert.isTrue(exchange.getStatusCode().equals(HttpStatus.OK), "本單位數(shù)據(jù)獲取異常");
}
}思路及步驟
通過指定SpringBootTest的classes, 只啟動(dòng)當(dāng)前類,如果需要注入其它bean, 則使用@import進(jìn)行引入
如果import內(nèi)部的類也也需要引入其它類, 同理根據(jù)需要使用@Import注解, 這樣產(chǎn)生的代碼更加聚合, 所然在當(dāng)前類可以全部@Import, 但是看著頭疼
對(duì)于需要引入yml配置信息的,可以配合@EnableConfigurationProperties讀取測(cè)試目錄下的application.yml文件
最小化依賴方案的優(yōu)點(diǎn)
減少了容器啟動(dòng)時(shí)間, 對(duì)于當(dāng)前項(xiàng)目更加符合實(shí)際的使用場(chǎng)景, 畢竟第三方使用不可能啟動(dòng)你自己的容器:D
更加優(yōu)雅的解決了ehcache同時(shí)被容器掃描啟動(dòng), 本地文件鎖導(dǎo)致測(cè)試無法運(yùn)行, 實(shí)際測(cè)試代碼根本不需要緩存, 項(xiàng)目服務(wù)有就行
測(cè)試代碼也更加簡(jiǎn)單優(yōu)雅, 可以直接提供第三方公司作為接口請(qǐng)求示例代碼
結(jié)論
如果集成測(cè)試的場(chǎng)景類似當(dāng)前項(xiàng)目情況, 全部測(cè)試都從rest接口入手, 建議采用最小容器依賴方案
以上就是springboot集成測(cè)試最小化依賴實(shí)踐示例的詳細(xì)內(nèi)容,更多關(guān)于springboot集成測(cè)試依賴的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MyBatis高級(jí)映射及延遲加載的實(shí)現(xiàn)
MyBatis在處理對(duì)象關(guān)系映射時(shí),多對(duì)一關(guān)系是常見的場(chǎng)景,本文就來介紹了MyBatis高級(jí)映射及延遲加載的實(shí)現(xiàn),感興趣的可以了解一下2024-11-11
RocketMQ?NameServer架構(gòu)設(shè)計(jì)啟動(dòng)流程
這篇文章主要為大家介紹了RocketMQ?NameServer架構(gòu)設(shè)計(jì)啟動(dòng)流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
淺談兩個(gè)jar包中包含完全相同的包名和類名的加載問題
下面小編就為大家?guī)硪黄獪\談兩個(gè)jar包中包含完全相同的包名和類名的加載問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
解決mybatis批量更新出現(xiàn)SQL報(bào)錯(cuò)問題
這篇文章主要介紹了mybatis批量更新出現(xiàn)SQL報(bào)錯(cuò),解決辦法也很簡(jiǎn)單只需要在application.properties配置文中的數(shù)據(jù)源url后面添加一個(gè)參數(shù),需要的朋友可以參考下2022-02-02
Java上傳文件到服務(wù)器指定文件夾實(shí)現(xiàn)過程圖解
這篇文章主要介紹了Java上傳文件到服務(wù)器指定文件夾實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08

