国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot 自動化單元測試類的編寫過程

這篇具有很好參考價值的文章主要介紹了Spring Boot 自動化單元測試類的編寫過程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

Web環(huán)境模擬測試

企業(yè)開發(fā)不僅要保障業(yè)務(wù)層與數(shù)據(jù)層的功能安全有效,也要保障表現(xiàn)層的功能正常。但是我們一般對表現(xiàn)層的測試都是通過postman手工測試的,并沒有在打包過程中代碼體現(xiàn)表現(xiàn)層功能被測試通過。那么能否在測試用例中對表現(xiàn)層進行功能測試呢?答案是可以的,我們可以使用MockMvc來實現(xiàn)它。

1、測試類中啟動web環(huán)境

每一個springboot的測試類上方都會標(biāo)準(zhǔn)@SpringBootTest注解,而注解帶有一個屬性,叫做webEnvironment。通過該屬性就可以設(shè)置在測試用例中啟動web環(huán)境,具體如下:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class BookControllerTest {

}

測試類中啟動web環(huán)境時,可以指定啟動的Web環(huán)境對應(yīng)的端口,springboot提供了4種設(shè)置值,分別如下:

  • MOCK:根據(jù)當(dāng)前設(shè)置確認(rèn)是否啟動web環(huán)境,例如使用了Servlet的API就啟動web環(huán)境,屬于適配性的配置
  • DEFINED_PORT:使用自定義的端口作為web服務(wù)器端口
  • RANDOM_PORT:使用隨機端口作為web服務(wù)器端口
  • NONE:不啟動web環(huán)境

建議大家測試時使用RANDOM_PORT,避免項目打包運行時由于端口沖突導(dǎo)致意外現(xiàn)象的出現(xiàn)。

2、測試類中發(fā)送請求

單元測試(MockMvc)

1、mockMvc.perform執(zhí)行一個請求;

2、MockMvcRequestBuilders.get("/user/1")構(gòu)造一個請求

3、ResultActions.andExpect添加執(zhí)行完成后的斷言

4、ResultActions.andDo添加一個結(jié)果處理器,表示要對結(jié)果做點什么事情,比如此處使用MockMvcResultHandlers.print()輸出整個響應(yīng)結(jié)果信息。

5、ResultActions.andReturn表示執(zhí)行完成后返回相應(yīng)的結(jié)果。

MockMvcBuilder是用來構(gòu)造MockMvc的構(gòu)造器,其主要有兩個實現(xiàn):StandaloneMockMvcBuilder和DefaultMockMvcBuilder,StandaloneMockMvcBuilder繼承了DefaultMockMvcBuilder。直接使用靜態(tài)工廠MockMvcBuilders創(chuàng)建即可:

MockMvcBuilders.webAppContextSetup(WebApplicationContext context):指定WebApplicationContext,將會從該上下文獲取相應(yīng)的控制器并得到相應(yīng)的MockMvc;

MockMvcBuilders.standaloneSetup(Object... controllers):通過參數(shù)指定一組控制器,這樣就不需要從上下文獲取了;

MockMvcRequestBuilders主要API:

MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables):根據(jù)uri模板和uri變量值得到一個GET請求方式的MockHttpServletRequestBuilder;如get("/user/{id}", 1L);

MockHttpServletRequestBuilder post(String urlTemplate, Object... urlVariables):同get類似,但是是POST方法;

MockHttpServletRequestBuilder put(String urlTemplate, Object... urlVariables):同get類似,但是是PUT方法;

MockHttpServletRequestBuilder delete(String urlTemplate, Object... urlVariables) :同get類似,但是是DELETE方法;

ResultActions

  1. 調(diào)用MockMvc.perform(RequestBuilder requestBuilder)后將得到ResultActions,通過ResultActions完成如下三件事:
  2. ResultActions andExpect(ResultMatcher matcher) :添加驗證斷言來判斷執(zhí)行請求后的結(jié)果是否是預(yù)期的;
  3. ResultActions andDo(ResultHandler handler) :添加結(jié)果處理器,用于對驗證成功后執(zhí)行的動作,如輸出下請求/結(jié)果信息用于調(diào)試;
  4. MvcResult andReturn() :返回驗證成功后的MvcResult;用于自定義驗證/下一步的異步處理;(主要是拿到結(jié)果進一步做自定義斷言)

我們該在測試類中如何發(fā)送請求呢?具體操作如下:

步驟①:在測試類中開啟web虛擬調(diào)用功能,通過注解@AutoConfigureMockMvc實現(xiàn)此功能的開啟。

步驟②:定義發(fā)起虛擬調(diào)用的對象MockMVC,通過自動裝配的形式初始化對象。

步驟③:創(chuàng)建一個虛擬請求對象,封裝請求的路徑,并使用MockMVC對象發(fā)送對應(yīng)請求

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class BookControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void getBooks() throws Exception {

            //創(chuàng)建虛擬請求,當(dāng)前訪問/books 
            MockHttpServletRequestBuilder requestBuilder =
                     MockMvcRequestBuilders.get("/books");
            //執(zhí)行對應(yīng)的請求
            mvc.perform(requestBuilder);
     
    }
}

注意訪問路徑不要寫
http://localhost:8080/books,因為前面的服務(wù)器IP地址和端口使用的是當(dāng)前虛擬的web環(huán)境,無需指定,僅指定請求的具體路徑即可。

另外:測試用例如果測試時產(chǎn)生了事務(wù)提交就會在測試過程中對數(shù)據(jù)庫數(shù)據(jù)產(chǎn)生影響,進而產(chǎn)生垃圾數(shù)據(jù)。這個過程不是我們希望發(fā)生的,如何避免呢?

我們只需要在原始測試用例中添加注解@Transactional即可實現(xiàn)當(dāng)前測試用例的事務(wù)不提交。當(dāng)程序運行后,只要注解@Transactional出現(xiàn)的位置存在注解@SpringBootTest,springboot就會認(rèn)為這是一個測試程序,無需提交事務(wù),所以也就可以避免事務(wù)的提交。

當(dāng)然,這里我們也可以使用h2數(shù)據(jù)庫來做測試;具體詳情可以查看:

SpringBoot+MockMvc+H2 自動化單元測試的示例代碼https://download.csdn.net/download/A_aspectJ/88879412?spm=1001.2014.3001.5503SpringBoot+MockMvc+H2 自動化單元測試的例代碼開發(fā)過程總結(jié)文章來源地址http://www.zghlxwxcb.cn/news/detail-853040.html

總結(jié):

  • 在測試類中測試web層接口要保障測試類啟動時啟動web容器,使用@SpringBootTest注解的webEnvironment屬性可以虛擬web環(huán)境用于測試
  • 為測試方法注入MockMvc對象,通過MockMvc對象可以發(fā)送虛擬請求,模擬web請求調(diào)用過程
  • web虛擬調(diào)用可以對本地虛擬請求的返回響應(yīng)信息進行比對,分為響應(yīng)頭信息比對、響應(yīng)體信息比對、響應(yīng)狀態(tài)信息比對。

到了這里,關(guān)于Spring Boot 自動化單元測試類的編寫過程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 前端單元測試與自動化測試實踐

    在前端開發(fā)中,單元測試和自動化測試是保證代碼質(zhì)量和穩(wěn)定性的重要手段。通過編寫和執(zhí)行測試用例,可以及早發(fā)現(xiàn)代碼中的問題,并確保代碼在不同環(huán)境下的正確運行。本文將介紹前端單元測試和自動化測試的實踐,并通過一個示例說明其重要性和具體操作。 前端單元測

    2024年02月12日
    瀏覽(24)
  • 自動化測試——unittest框架(單元測試)

    自動化測試——unittest框架(單元測試)

    目錄 一、unittest框架解析 1.1unittest的5個重要概念 1.1測試用例的編寫及代碼 1.2斷言 1.3用例的執(zhí)行順序 1.4測試用例綜合管理框架 1.5HTML報告生成 參考博文 unittest 單元測試提供了創(chuàng)建測試用例,測試套件以及批量執(zhí)行的方案, unittest 在安裝pyhton 以后就直接自帶了,直接import

    2024年01月17日
    瀏覽(25)
  • Android 自動化單元測試

    2024年02月13日
    瀏覽(25)
  • MIL自動化單元測試

    MIL自動化單元測試

    之前學(xué)習(xí)MIL, 一直想對模型的進行自動化測試,最近正好做了,把心得寫下來。 MIL測試就是模型在環(huán)測試,通過純軟件仿真的形式,驗證模型能否滿足功能需求,盡早發(fā)現(xiàn)問題。 MIL分為單元測試與集成測試 看圖很好理解,集成測試閉環(huán),單元測試開環(huán)。 確定被測模型的 輸入

    2023年04月09日
    瀏覽(33)
  • ChatGPT輔助編寫自動化測試

    ChatGPT輔助編寫自動化測試

    大家好,我是洋子,ChatGPT已經(jīng)越來越火爆,國內(nèi)百度、阿里等互聯(lián)網(wǎng)大廠也紛紛投入大模型研究,OpenAI官網(wǎng)中提供了許多ChatGPT應(yīng)用場景,例如SQL翻譯、語言翻譯、代碼解釋等 作為一名QA,我更關(guān)注ChatGPT生成的自動化測試腳本質(zhì)量如何,借助ChatGPT能否提升自動化測試編寫效率

    2024年02月10日
    瀏覽(17)
  • 自動化測試腳本編寫(超詳細(xì))

    自動化測試腳本編寫(超詳細(xì))

    ?? 視頻學(xué)習(xí): 文末有免費的配套視頻可觀看 ??? 關(guān)注公眾號【互聯(lián)網(wǎng)雜貨鋪】,回復(fù) 1? ,免費獲取軟件測試全套資料,資料在手,漲薪更快 什么是自動化測試? 自動化測試是驗證和驗證軟件是否滿足所有用戶需求,并使用自動化工具按預(yù)期運行。它檢查在產(chǎn)品開發(fā)階段

    2024年04月26日
    瀏覽(21)
  • Rust之編寫自動化測試

    在最簡單的情形下,Rust中的測試就是一個標(biāo)注有test屬性的函數(shù)。屬性 (attribute)是一種用于修飾Rust代碼的元數(shù)據(jù)。只需要將#[test]添加到fn的上一行便可以將函數(shù)轉(zhuǎn)變?yōu)闇y試函數(shù)。當(dāng)測試編寫完成后,我們可以使用cargo test命令來運行測試。這個命令會構(gòu)建并執(zhí)行一個用于測

    2024年02月12日
    瀏覽(26)
  • 【Rust】——編寫自動化測試(一)

    ??個人專欄: ?? 算法設(shè)計與分析:算法設(shè)計與分析_IT閆的博客-CSDN博客 ??Java基礎(chǔ):Java基礎(chǔ)_IT閆的博客-CSDN博客 ??c語言:c語言_IT閆的博客-CSDN博客 ??MySQL:數(shù)據(jù)結(jié)構(gòu)_IT閆的博客-CSDN博客 ??數(shù)據(jù)結(jié)構(gòu):??????數(shù)據(jù)結(jié)構(gòu)_IT閆的博客-CSDN博客 ??C++:C++_IT閆的博客-CSDN博

    2024年04月09日
    瀏覽(24)
  • 自動化測試之JUnit單元測試框架

    自動化測試之JUnit單元測試框架

    目錄 一、什么是 JUnit 二、JUnit5 相關(guān)技術(shù) 1.注解 1.1 @Test 1.2 @Disabled 1.3 @BeforeAll、@AfterAll 1.4 @BeforeEach、@AfterEach 2.參數(shù)化 2.1 單參數(shù) 2.2 CSV 獲取參數(shù) 2.3 方法獲取參數(shù) 2.4 多參數(shù) 3.測試用例的執(zhí)行順序 3.1 順序執(zhí)行:@TestMethodOrder(MethodOrderer.OrderAnnotation.class) 3.2 隨機執(zhí)行:@TestMetho

    2024年02月06日
    瀏覽(34)
  • Pytest自動化測試框架---(單元測試框架)

    Pytest自動化測試框架---(單元測試框架)

    unittest是python自帶的單元測試框架,它封裝好了一些校驗返回的結(jié)果方法和一些用例執(zhí)行前的初始化操作,使得單元測試易于開展,因為它的易用性,很多同學(xué)也拿它來做功能測試和接口測試,只需簡單開發(fā)一些功能(報告,初始化webdriver,或者http請求方法)便可實現(xiàn)。 但自

    2024年02月14日
    瀏覽(120)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包