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

springboot集成測試最小化依賴實踐示例

 更新時間:2023年06月19日 10:35:19   作者:離線請留言  
這篇文章主要為大家介紹了springboot集成測試最小化依賴實踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

簡介

想要代碼跑的穩(wěn), 集成測試還是必不可少的, 不然出現(xiàn)開發(fā)環(huán)境正常, 集成環(huán)境各種問題就坑爹了。

當前項目對外提供各種rest接口, 通過RestTemplate做接口測試, 同時需要注入一些SpringBean, 如何使用SpringBootTest又不需要啟動整個容器?

版本及依賴引入

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>

項目部分依賴

<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)
// 默認啟動容器
@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ù)獲取異常");
    }
}

場景及優(yōu)劣

優(yōu)勢

如果是測試類中大量引入了依賴, 這種情況下直接啟動容器比較方便, 不過集成測試個人感覺從入口訪問即可, 這種嵌套比較深的建議使用單元測試

劣勢

當前項目中測試代碼需要依賴很少, 極端情況下只用restTemplate即可, 根本沒必要啟動容器, 而且啟動容器占用了大量時間

項目中使用了ehcache3.x作為本地緩存, 啟動容器后因為文件鎖無法測試, 如果單獨指定ehcache.xml配置, 又會產(chǎn)生新的垃圾, 所以果斷減少依賴

最小化依賴方案

代碼

@RunWith(SpringRunner.class)
// 指定class就不啟動容器了
@SpringBootTest(classes = BdgResourceITest.class)
@Import(value = {ITestRestTemplateConfigurer.class})
// 激活 main 中resources下的test profile
//@ActiveProfiles("dev")
// 加載測試目錄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, 只啟動當前類,如果需要注入其它bean, 則使用@import進行引入

如果import內(nèi)部的類也也需要引入其它類, 同理根據(jù)需要使用@Import注解, 這樣產(chǎn)生的代碼更加聚合, 所然在當前類可以全部@Import, 但是看著頭疼

對于需要引入yml配置信息的,可以配合@EnableConfigurationProperties讀取測試目錄下的application.yml文件

最小化依賴方案的優(yōu)點

減少了容器啟動時間, 對于當前項目更加符合實際的使用場景, 畢竟第三方使用不可能啟動你自己的容器:D

更加優(yōu)雅的解決了ehcache同時被容器掃描啟動, 本地文件鎖導致測試無法運行, 實際測試代碼根本不需要緩存, 項目服務有就行

測試代碼也更加簡單優(yōu)雅, 可以直接提供第三方公司作為接口請求示例代碼

結(jié)論

如果集成測試的場景類似當前項目情況, 全部測試都從rest接口入手, 建議采用最小容器依賴方案

以上就是springboot集成測試最小化依賴實踐示例的詳細內(nèi)容,更多關(guān)于springboot集成測試依賴的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MyBatis高級映射及延遲加載的實現(xiàn)

    MyBatis高級映射及延遲加載的實現(xiàn)

    MyBatis在處理對象關(guān)系映射時,多對一關(guān)系是常見的場景,本文就來介紹了MyBatis高級映射及延遲加載的實現(xiàn),感興趣的可以了解一下
    2024-11-11
  • java實現(xiàn)雙人五子棋游戲

    java實現(xiàn)雙人五子棋游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)雙人五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • java重試機制使用RPC必須考慮冪等性原理解析

    java重試機制使用RPC必須考慮冪等性原理解析

    這篇文章主要為大家介紹了java重試機制使用RPC必須考慮冪等性原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 如何用java實現(xiàn)分頁查詢

    如何用java實現(xiàn)分頁查詢

    這篇文章主要介紹了如何用java實現(xiàn)分頁查詢,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • RocketMQ?NameServer架構(gòu)設計啟動流程

    RocketMQ?NameServer架構(gòu)設計啟動流程

    這篇文章主要為大家介紹了RocketMQ?NameServer架構(gòu)設計啟動流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 淺談兩個jar包中包含完全相同的包名和類名的加載問題

    淺談兩個jar包中包含完全相同的包名和類名的加載問題

    下面小編就為大家?guī)硪黄獪\談兩個jar包中包含完全相同的包名和類名的加載問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 解決mybatis批量更新出現(xiàn)SQL報錯問題

    解決mybatis批量更新出現(xiàn)SQL報錯問題

    這篇文章主要介紹了mybatis批量更新出現(xiàn)SQL報錯,解決辦法也很簡單只需要在application.properties配置文中的數(shù)據(jù)源url后面添加一個參數(shù),需要的朋友可以參考下
    2022-02-02
  • 詳解Java中的HashTable

    詳解Java中的HashTable

    這篇文章主要介紹了Java中的HashTable的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • Java之類加載機制案例講解

    Java之類加載機制案例講解

    這篇文章主要介紹了Java之類加載機制案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Java上傳文件到服務器指定文件夾實現(xiàn)過程圖解

    Java上傳文件到服務器指定文件夾實現(xiàn)過程圖解

    這篇文章主要介紹了Java上傳文件到服務器指定文件夾實現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08

最新評論

通州区| 涟水县| 五原县| 南和县| 封丘县| 广汉市| 子洲县| 长阳| 鹤山市| 宜阳县| 福安市| 新乐市| 奉贤区| 察哈| 板桥市| 溧水县| 玛曲县| 长武县| 吉林市| 贵阳市| 紫云| 花莲县| 吉木萨尔县| 霍城县| 新昌县| 新乡市| 乌兰县| 崇阳县| 建湖县| 淳安县| 台中市| 盐边县| 连平县| 江西省| 富民县| 平谷区| 竹山县| 突泉县| 盘山县| 邻水| 海盐县|