欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

一、SpringBoot單元測試的使用

1.1 引入依賴

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

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

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

點擊Generate然后選擇Test

選擇好之后點擊Ok就創(chuàng)建好一個測試類了。

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

二、Spring Boot使用Mockito進行單元測試

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

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

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

了解完了Mockito常使用的一些注解之后,下面就開始對各種情況的Mock

2.2 使用Mockito測試類中的方法

@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測試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);
    }
}
 
// 測試方法代碼
@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請求到Controller的API接口,并調(diào)用@MockBean中mock出來的方法

2.4 mock測試其它場景

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

總結(jié)

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

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

相關(guān)文章

  • 異常點/離群點檢測算法——LOF解析

    異常點/離群點檢測算法——LOF解析

    這篇文章主要介紹了異常點/離群點檢測算法——LOF解析,通過圖解文字描述的方式詳細的解析了該算法,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 基于RecyclerChart的KLine繪制詳解

    基于RecyclerChart的KLine繪制詳解

    這篇文章主要為大家詳細介紹了基于RecyclerChart實現(xiàn)KLine繪制的相關(guān)資料,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • Java數(shù)據(jù)結(jié)構(gòu)貪心算法的實現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)貪心算法的實現(xiàn)

    本文主要介紹了Java數(shù)據(jù)結(jié)構(gòu)貪心算法的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2007-03-03
  • 十種JAVA排序算法實例

    十種JAVA排序算法實例

    本文件講了十種JAVA排序方法(冒泡(Bubble)排序——相鄰交換 、選擇排序——每次最小/大排在相應(yīng)的位置 、插入排序——將下一個插入已排好的序列中 、殼(Shell)排序——縮小增量 、歸并排序 、快速排序 、堆排序 、拓撲排序 、錦標(biāo)賽排序 、基數(shù)排序)的使用,并提供了實例代碼可參考
    2013-11-11
  • Spring整合websocket整合應(yīng)用示例(下)

    Spring整合websocket整合應(yīng)用示例(下)

    這篇文章主要介紹了Spring整合websocket整合應(yīng)用示例(下)的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • Java swing 圖像處理多種效果實現(xiàn)教程

    Java swing 圖像處理多種效果實現(xiàn)教程

    這篇文章主要介紹了Java swing 圖像處理多種效果實現(xiàn)教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • springboot項目啟動自動跳轉(zhuǎn)到瀏覽器的操作代碼

    springboot項目啟動自動跳轉(zhuǎn)到瀏覽器的操作代碼

    這篇文章主要介紹了springboot項目啟動自動跳轉(zhuǎn)到瀏覽器的操作代碼,本文圖文實例代碼相結(jié)合給大家介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • SpringMVC常用注解載入與處理方式詳解

    SpringMVC常用注解載入與處理方式詳解

    這篇文章主要介紹了SpringMVC常用注解載入的方式和處理的方式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Java多線程及線程安全實現(xiàn)方法解析

    Java多線程及線程安全實現(xiàn)方法解析

    這篇文章主要介紹了Java多線程及線程安全實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Java SpringBoot容器注入對象詳解

    Java SpringBoot容器注入對象詳解

    本文通過實例代碼給大家詳解了springboot獲取ioc容器中注入的bean問題,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-09-09

最新評論