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

【springboot單元測試,集成測試】

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

本文介紹一下SpringBoot中的測試方法

集成測試

@SpringBootTest

一個普通的web api

@RequestMapping
@RestController
public class HelloController {

    @Autowired
    RestTemplate restTemplate;

    @GetMapping(value = "/api/hi")
    public Map<String,Object> hello() {

        String baiduRes = restTemplate.getForObject("https://www.baidu.com", String.class);
        Map<String, Object> res = new HashMap<>();
        res.put("status", "中");
        res.put("msg", baiduRes);
        return res;
    }
}

測試類:


package xyz.bliu.sptest;


import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.web.client.RestTemplate;

import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest
public class ControllerTest02 {

    @Autowired
    RestTemplate restTemplate;

    @Autowired
    MockMvc mockMvc;

    @Test
    public void restTemplateShouldNotNull() {
        assertThat(restTemplate).isNotNull();
    }

    @Test
    public void testGetRequest() throws Exception {

        mockMvc.perform(get("/api/hi"))
               .andExpect(status().isOk())
               .andDo(print());
    }
}

使用mockMvc好處是不會啟動真實的web服務(wù)
當(dāng)然你可以使用@SpingBootTest 并且注入一個RestTemplate來做真實的請求

假如希望僅僅測試controller層時, 可以使用另外一個注解
@WebMvcTest
他有一個參數(shù)可以指定測試的controller


package xyz.bliu.sptest;


import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.web.client.RestTemplate;
import xyz.bliu.sptest.controller.HelloController;

import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;

@WebMvcTest(controllers = HelloController.class)
public class ControllerTest01 {


    @Autowired
    MockMvc mockMvc;

    @MockBean
    RestTemplate restTemplate;

    @Test
    public void helloShouldOK() throws Exception {

        when(restTemplate.getForObject("https://www.baidu.com", String.class)).thenReturn("haha");

        assertThat(mockMvc).isNotNull();
        mockMvc.perform(get("/api/hi").header("kk", "v1")
                        .header("Content-Type", "application/json"))
                .andDo(print())
                .andExpect(content().contentType("application/json"))
                .andExpect(content().json("{'status':'中', 'msg':'haha'}"));
    }


    @Test
    public void restTemplateShouldBeNull() {
        assertThat(restTemplate).isNull();
    }
}

這樣僅會加載指定的controller和一些web層的東西不會加載其他Bean
假如這個controller中依賴其他的bean怎么辦呢?
答案是需要使用@MockBean去Mock依賴的行為

例如我這里的處理

 @MockBean
 RestTemplate restTemplate;

 when(restTemplate.getForObject("https://www.baidu.com", String.class)).thenReturn("haha");

其實就是說當(dāng)調(diào)用restTemplate.getForObject(“https://www.baidu.com”, String.class)時,方法會返回“haha”


@WebMvcTest VS @SpringBootTest

顯然當(dāng)你只需要測試你的controller接收請求參數(shù)或者返回值時你可以使用@WebMvcTest, 因為它不需要加載整個application context, 因此會使你的test更快

然而當(dāng)需要集成測試時則需要@SpringBootTest
并且他們是不能同時使用的

  • 另外你可能注意到了AssertJ 提供的 assertThat api非常好用,可以流式調(diào)用

  • 另外本文測試環(huán)境為spring boot 3.x 和 Junit5
    如果你使用是springboot 2.x 你可能還需要 @RunWith(SpringRuner.class) ( junit4)或者 @extendwith(springextension.class) (junit5)文章來源地址http://www.zghlxwxcb.cn/news/detail-717477.html

當(dāng)然你可以使用@SpingBootTest 并且注入一個RestTemplate來做真實的請求

package xyz.bliu.sptest;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

import static org.assertj.core.api.Assertions.assertThat;

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


    @Autowired
    RestTemplate restTemplate;

    @LocalServerPort
    int port;

    @Test
    public void testGet() {
        Map resp = restTemplate.getForObject("http://localhost:"+port+ "/api/hi", Map.class);
        assertThat(resp.get("status").toString()).isEqualTo("中");
    }
}

到了這里,關(guān)于【springboot單元測試,集成測試】的文章就介紹完了。如果您還想了解更多內(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ìn)行投訴反饋,一經(jīng)查實,立即刪除!

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

相關(guān)文章

  • 【springboot單元測試,集成測試】

    本文介紹一下SpringBoot中的測試方法 @SpringBootTest 一個普通的web api 測試類: 使用mockMvc好處是不會啟動真實的web服務(wù) 當(dāng)然你可以使用@SpingBootTest 并且注入一個RestTemplate來做真實的請求 假如希望僅僅測試controller層時, 可以使用另外一個注解 @WebMvcTest 他有一個參數(shù)可以指定測試

    2024年02月08日
    瀏覽(21)
  • 單元測試之 - Spring框架提供的單元/集成測試注解

    單元測試之 - Spring框架提供的單元/集成測試注解

    Spring框架提供了很多注解來輔助完成單元測試和集成測試(備注:這里的集成測試指容器內(nèi)部的集成測試,非系統(tǒng)間的集成測試),先看看Spring框架提供了哪些注解以及對應(yīng)的作用。 @RunWith(SpringRunner.class) / @ExtendWith(SpringExtension.class) : 用于在測試類中啟用 Spring 框架的支持。

    2024年02月14日
    瀏覽(21)
  • Spring Boot單元測試

    Spring Boot單元測試

    ??????SSM專欄更新中,各位大佬覺得寫得不錯,支持一下,感謝了!?????? Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 Spring Boot 中進(jìn)行單元測試是一個常見的做法,可以幫助你驗證應(yīng)用程序的各個組件是否按預(yù)期工作。所以我們有必要去學(xué)習(xí)一番! 單元測試

    2024年02月13日
    瀏覽(18)
  • 【Spring Boot】單元測試

    單元測試在日常項目開發(fā)中必不可少,Spring Boot提供了完善的單元測試框架和工具用于測試開發(fā)的應(yīng)用。接下來介紹Spring Boot為單元測試提供了哪些支持,以及如何在Spring Boot項目中進(jìn)行單元測試。 單元測試主要用于測試單個代碼組件,以確保代碼按預(yù)期方式工作。目前流行的

    2024年02月16日
    瀏覽(17)
  • SpringBoot 集成Junit單元測試

    SpringBoot 集成Junit單元測試

    學(xué)習(xí)文章: https://www.cnblogs.com/ysocean/p/6889906.html 開發(fā)工具: IDEA 2022.1.4 目錄 目錄 1. 概述 ?2. 實現(xiàn)步驟 ??????? 2.1 maven導(dǎo)入依賴 ???????? 2.2 隨意代碼演示(不推薦) ??????? 2.3 規(guī)范代碼演示(推薦) 3. Junit相關(guān)其他注解 4. 注意事項 5. 結(jié)語 ??????? 接觸到Junit,應(yīng)該是看

    2024年02月09日
    瀏覽(22)
  • Spring Boot單元測試入門指南

    Spring Boot單元測試入門指南

    JUnit是一個成熟和廣泛應(yīng)用的Java單元測試框架,它提供了豐富的功能和靈活的擴展機制,可以幫助開發(fā)人員編寫高質(zhì)量的單元測試。通過JUnit,開發(fā)人員可以更加自信地進(jìn)行重構(gòu)、維護(hù)和改進(jìn)代碼,同時提高代碼質(zhì)量和可維護(hù)性。 在使用Spring Boot進(jìn)行單元測試時,以下是一些

    2024年02月15日
    瀏覽(24)
  • 三個要點,掌握Spring Boot單元測試

    三個要點,掌握Spring Boot單元測試

    單元測試是軟件開發(fā)中不可或缺的重要環(huán)節(jié),它用于驗證軟件中最小可測試單元的準(zhǔn)確性。 結(jié)合運用Spring Boot、JUnit、Mockito和分層架構(gòu),開發(fā)人員可以更便捷地編寫可靠、可測試且高質(zhì)量的單元測試代碼,確保軟件的正確性和質(zhì)量。 本文將從與單元測試相關(guān)的技術(shù)主題開始,

    2024年02月08日
    瀏覽(25)
  • Spring Boot 做單元測試,真心強悍!

    Spring Boot 做單元測試,真心強悍!

    Spring Boot 提供了豐富的測試功能,主要由以下兩個模塊組成: spring-boot-test :提供測試核心功能。 spring-boot-test-autoconfigure :提供對測試的自動配置。 Spring Boot 提供了一個? spring-boot-starter-test 一站式啟動器,如以下依賴配置所示。 測試啟動器依賴不僅包含以上兩個 Spring Bo

    2024年02月04日
    瀏覽(24)
  • Spring Boot 單元測試 0基礎(chǔ)教程

    咱們以一種通俗易懂的方式,通過一個簡單的實例來教你怎么在Spring Boot項目中進(jìn)行單元測試。 假設(shè)你有一個簡單的Spring Boot應(yīng)用,里面有一個UserService接口,以及它的實現(xiàn)類 UserServiceImpl,這個服務(wù)有一個方法用來獲取用戶的問候語。 為了對該方法進(jìn)行單元測試,我們可以創(chuàng)

    2024年04月16日
    瀏覽(17)
  • Spring Boot異常處理和單元測試

    Spring Boot異常處理和單元測試

    SpringBoot默認(rèn)的處理異常的機制:SpringBoot 默認(rèn)的已經(jīng)提供了一套處理異常的機制。一旦程序中出現(xiàn)了異常 SpringBoot 會向/error 的 url 發(fā)送請求。在 springBoot 中提供了一個叫 BasicErrorController 來處理/error 請求,然后跳轉(zhuǎn)到默認(rèn)顯示異常的頁面來展示異常信息 如 果我 們 需 要 將 所

    2024年03月17日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包