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

SpringBoot項(xiàng)目創(chuàng)建單元測(cè)試的流程步驟

 更新時(shí)間:2024年11月05日 11:12:01   作者:汪爪蛙  
在日常開(kāi)發(fā)的過(guò)程中,對(duì)自己的代碼進(jìn)行單元測(cè)試是個(gè)非常重要的過(guò)程,一方面可以最小范圍的針對(duì)一個(gè)方法進(jìn)行測(cè)試,提高測(cè)試的簡(jiǎn)便性以及測(cè)試的成本,本篇文章主要是為了總結(jié)一下如何優(yōu)雅的在Springboot項(xiàng)目中使用單元測(cè)試去測(cè)試功能,需要的朋友可以參考下

前言

在日常開(kāi)發(fā)的過(guò)程中,對(duì)自己的代碼進(jìn)行單元測(cè)試是個(gè)非常重要的過(guò)程,一方面可以最小范圍的針對(duì)一個(gè)方法進(jìn)行測(cè)試,提高測(cè)試的簡(jiǎn)便性以及測(cè)試的成本,不用啟動(dòng)這個(gè)項(xiàng)目。另一方面,做好單元測(cè)試能降低代碼的BUG率。本篇文章主要是為了總結(jié)一下如何優(yōu)雅的在Springboot項(xiàng)目中使用單元測(cè)試去測(cè)試功能。

一、SpringBoot單元測(cè)試的使用

1.1 引入依賴

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
</dependency>

1.2 創(chuàng)建單元測(cè)試類

如果使用的開(kāi)發(fā)工具為IntelliJ IDEA,點(diǎn)擊進(jìn)入方法,鼠標(biāo)右鍵

點(diǎn)擊Generate然后選擇Test

選擇好之后點(diǎn)擊Ok就創(chuàng)建好一個(gè)測(cè)試類了。

然后在測(cè)試類上添加@SpringBootTest注解,需要測(cè)試的方法上已經(jīng)有@Test注解了 。點(diǎn)擊方法左側(cè)的三角形即可運(yùn)行單元測(cè)試方法。

二、Spring Boot使用Mockito進(jìn)行單元測(cè)試

Mockito可以模擬一個(gè)類或者方法,使用Mockito進(jìn)行單元測(cè)試的話就可以只關(guān)注這一個(gè)待測(cè)試的方法而不用去啟動(dòng)整個(gè)項(xiàng)目。項(xiàng)目依賴很多環(huán)境,比如中間件、數(shù)據(jù)庫(kù)等,如果使用第一種方法進(jìn)行測(cè)試的話,則這些環(huán)境都要準(zhǔn)備好。

2.1 Mockito中經(jīng)常使用的注解以及注解的作用

  • @Mock:用于創(chuàng)建被mock的對(duì)象實(shí)例。添加了@Mock注解的對(duì)象中的方法都需要mock出來(lái),而不是調(diào)用對(duì)象本來(lái)的方法
  • @Spy:創(chuàng)建保留原對(duì)象中的方法的對(duì)象。與@Mock注解不同的是,@Spy注解會(huì)保留原對(duì)象的行為,除了被特別標(biāo)記的方法,其他的方法都會(huì)執(zhí)行原有的代碼
  • @InjectMocks:用于創(chuàng)建需要注入被Mock對(duì)象的類實(shí)例。例如:Service中注入了一個(gè)Dao,需要測(cè)試的Service中的方法使用了Dao,這個(gè)Dao上面添加了@Mock注解。則測(cè)試類中的Service就需要添加@InjectMocks注解。
  • @Captor:用于捕獲方法調(diào)用的參數(shù),方便進(jìn)行進(jìn)一步的斷言和校驗(yàn)
  • @MockBean:用于創(chuàng)建Spring Bean的Mock對(duì)象,主要用于集成測(cè)試。在進(jìn)行集成測(cè)試時(shí),有時(shí)需要使用Spring容器中的Bean進(jìn)行測(cè)試,但是又不希望與其他服務(wù)產(chǎn)生依賴關(guān)系。這時(shí)可以使用@MockBean注解,創(chuàng)建一個(gè)Spring Bean的Mock對(duì)象。
  • @MockitoSettings:用于設(shè)置Mockito框架的全局設(shè)置。在進(jìn)行單元測(cè)試時(shí),有時(shí)需要設(shè)置Mockito框架的一些全局設(shè)置,例如默認(rèn)的返回值等。這時(shí)可以使用@MockitoSettings注解來(lái)設(shè)置這些全局配置。

了解完了Mockito常使用的一些注解之后,下面就開(kāi)始對(duì)各種情況的Mock

2.2 使用Mockito測(cè)試類中的方法

@SpringBootTest
public class ProductImageServiceImplMockito {
 
    @Mock
    private ProductImageMapper productImageMapper;
 
    @InjectMocks
    private ProductImageServiceImpl productImageService;
 
 
    @BeforeEach
    public void setup() {
        MockitoAnnotations.openMocks(this);
    }
 
 
    @Test
    public void testGet() {
        ProductImage productImage = new ProductImage();
        productImage.setId(1l);
        productImage.setImageUrl("mockUrl");
        // mock方法的邏輯
        when(productImageMapper.selectById(1l)).thenReturn(productImage);
        ProductImage image = productImageService.getByImageId(1l);
        assertEquals("mockUrl", image.getImageUrl());
    }
}

在Mapper上面添加了@Mock注解,則Mapper中的方法都是mock的,這里mock了selectById方法。

2.3 使用Mockito測(cè)試Controller層的方法

// Controller層代碼
@RestController
@RequestMapping("/test")
public class ProductImageController {
 
    @Autowired
    private ProductImageServiceImpl productImageService;
 
    @GetMapping("/productImage/{id}")
    public ProductImage getProductById(@PathVariable("id") Long id) {
        return productImageService.getByImageId(id);
    }
}
 
// 測(cè)試方法代碼
@WebMvcTest(ProductImageController.class)
public class ProductImageServiceImplMockitoV2 {
 
    @MockBean
    private ProductImageServiceImpl productImageService;
 
    @Autowired
    private MockMvc mockMvc;
 
    @Test
    public void test() throws Exception {
        ProductImage productImage = new ProductImage();
        productImage.setId(1l);
        productImage.setImageUrl("mockUrl");
        when(productImageService.getByImageId(1l)).thenReturn(productImage);
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/test/productImage/1"))
                .andExpect(status().isOk())
                .andReturn();
        String contentAsString = mvcResult.getResponse().getContentAsString();
    }
}

直接模擬發(fā)送http請(qǐng)求到Controller的API接口,并調(diào)用@MockBean中mock出來(lái)的方法

2.4 mock測(cè)試其它場(chǎng)景

還有很多場(chǎng)景,這里就不一一列舉了,直接參考文章《在Spring Boot環(huán)境中使用Mockito進(jìn)行單元測(cè)試

總結(jié)

本文介紹了一些單元測(cè)試的方法,在日常開(kāi)發(fā)中應(yīng)該避免使用main方法測(cè)試的方式進(jìn)行測(cè)試,因?yàn)閙ain方法既無(wú)法模擬項(xiàng)目的環(huán)境,而且又受靜態(tài)方法的影響只能調(diào)用靜態(tài)方法。還有一些其它的測(cè)試工具,錄入yapi、easymock等也可以進(jìn)行測(cè)試使用。

以上就是SpringBoot項(xiàng)目創(chuàng)建單元測(cè)試的流程步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot創(chuàng)建單元測(cè)試的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot @RestController注解用法及說(shuō)明

    SpringBoot @RestController注解用法及說(shuō)明

    @RestController是Spring Boot中用于構(gòu)建RESTful Web服務(wù)的核心注解,它簡(jiǎn)化了RESTful服務(wù)的開(kāi)發(fā),該注解結(jié)合了@Controller和@ResponseBody的功能,使得控制器類中的所有請(qǐng)求處理方法的返回值會(huì)自動(dòng)序列化為JSON/XML格式并寫(xiě)入HTTP響應(yīng)體中
    2025-10-10
  • 基于Java語(yǔ)言MD5加密Base64轉(zhuǎn)換方法

    基于Java語(yǔ)言MD5加密Base64轉(zhuǎn)換方法

    這篇文章主要為大家詳細(xì)介紹了基于Java語(yǔ)言的MD5加密Base64轉(zhuǎn)換方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java中的異常Exception詳細(xì)解析

    Java中的異常Exception詳細(xì)解析

    這篇文章主要介紹了Java中的異常Exception詳細(xì)解析,Java語(yǔ)言中,將程序執(zhí)行中發(fā)生的不正常情況稱為"異常",(開(kāi)發(fā)過(guò)程中的語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤不是異常),異常分為兩大類,運(yùn)行時(shí)異常和編譯時(shí)異常,需要的朋友可以參考下
    2024-01-01
  • JavaWeb Refresh響應(yīng)頭代碼實(shí)例詳解

    JavaWeb Refresh響應(yīng)頭代碼實(shí)例詳解

    這篇文章主要介紹了JavaWeb Refresh響應(yīng)頭代碼實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • MyBatis 參數(shù)綁定的具體實(shí)現(xiàn)

    MyBatis 參數(shù)綁定的具體實(shí)現(xiàn)

    本文主要介紹了MyBatis 參數(shù)綁定的具體實(shí)現(xiàn),包括默認(rèn)參數(shù)名、@Param注解和POJO/DTO對(duì)象三種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • Java實(shí)現(xiàn)壓縮圖片大小

    Java實(shí)現(xiàn)壓縮圖片大小

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)壓縮圖片大小,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java Character類的詳解

    Java Character類的詳解

    本篇文章主要詳細(xì)介紹了JAVA中 Character類 方法等,需要的朋友可以參考下
    2017-04-04
  • Spring框架事務(wù)屬性中事務(wù)隔離級(jí)別與傳播行為全面講解

    Spring框架事務(wù)屬性中事務(wù)隔離級(jí)別與傳播行為全面講解

    這篇文章主要介紹了Spring框架聲明式事務(wù)的事務(wù)隔離級(jí)別和事務(wù)傳播行為,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-11-11
  • Mybatis實(shí)現(xiàn)單個(gè)和批量定義別名typeAliases

    Mybatis實(shí)現(xiàn)單個(gè)和批量定義別名typeAliases

    這篇文章主要介紹了Mybatis實(shí)現(xiàn)單個(gè)和批量定義別名typeAliases,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳解Java如何優(yōu)雅的調(diào)用dubbo同時(shí)不使用其它jar包

    詳解Java如何優(yōu)雅的調(diào)用dubbo同時(shí)不使用其它jar包

    這篇文章主要介紹了如何在不使用他人jar包的情況下優(yōu)雅的進(jìn)行dubbo調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02

最新評(píng)論

麻城市| 岱山县| 商城县| 塔城市| 苍梧县| 平乐县| 文山县| 临西县| 定日县| 荣成市| 英吉沙县| 洪洞县| 滨州市| 乌拉特前旗| 安塞县| 肥城市| 翼城县| 定南县| 蒲江县| 平塘县| 尖扎县| 寻乌县| 余干县| 江阴市| 信阳市| 西峡县| 夹江县| 达日县| 通道| 荃湾区| 凤山市| 濉溪县| 九江县| 通河县| 尉犁县| 会东县| 汝南县| 成都市| 潜山县| 六盘水市| 刚察县|