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

SpringBoot中@Test的介紹和使用案例

 更新時間:2023年08月21日 10:53:55   作者:fking86  
SpringBoot提供了方便的測試功能,可以很容易地進行單元測試和集成測試,這篇文章主要介紹了SpringBoot中@Test的介紹和使用,需要的朋友可以參考下

SpringBoot Test介紹

SpringBoot提供了方便的測試功能,可以很容易地進行單元測試和集成測試。主要包含以下幾點:

  • Spring Boot提供了@SpringBootTest注解,可以用來啟動Spring Boot應用,進行集成測試。
  • Spring Boot提供了@MockBean注解,可以用來 Mock Bean。
  • Spring Boot提供了@SpyBean注解,可以用來 Spy Bean。
  • Spring Boot提供了@SpringBootConfiguration注解,可以用來聲明配置類。
  • Spring Boot提供了AssertJ的支持,可以用來進行斷言。
  • Spring Boot提供了測試相關的工具類,如TestRestTemplate等。
  • SpringBoot提供了@LocalServerPort可以非常方便的模擬客戶端,對運行的服務進行端到端集成測試
  • SpringBoot提供了自動配置MockMvc,方便在測試類中直接注入并使用MockMvc

依賴

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

常用注解

@SpringBootTest

這個注解用來進行集成測試,會啟動整個Spring Boot應用,進行端到端測試。

用法:

@SpringBootTest
public class MyTest {
  // 測試方法
}

可以通過webEnvironment參數來指定測試環(huán)境:

  • MOCK:加載Web Application Context,不啟動Servlet容器。
  • RANDOM_PORT:加載Servlet容器,使用隨機端口。
  • DEFINED_PORT:加載Servlet容器,使用定義好的端口。
  • NONE:加載Web Application Context,但是不啟動Servlet容器。

@WebMvcTest

這個注解用來測試Web層,會自動注入Web層的Bean,不會啟動整個Spring Boot應用。

用法:

@WebMvcTest(UserController.class)
public class MyTest {
  @Autowired
  private MockMvc mvc;
  // 測試方法
}

@DataJpaTest

這個注解用來測試JPA相關的Bean,會自動配置Spring Data JPA相關的Bean。

用法:

code@DataJpaTest
public class MyTest {
  @Autowired
  private TestEntityManager entityManager;
  @Autowired
  private UserRepository userRepository;
  // 測試方法
}

@MockBean

這個注解用來Mock一個Bean,注入測試類中,用來Isolation測試。

用法:

@SpringBootTest
public class MyTest {
  @MockBean
  private UserService userService;
  // 測試方法
}

@SpyBean

這個注解用來Spy一個Bean,注入測試類中,不影響真正的Bean。

用法:

@SpringBootTest
public class MyTest {
  @MockBean
  private UserService userService;
  // 測試方法
}

@SpringBootConfiguration

這個注解用來聲明配置類,相當于@Configuration。

用法:

@SpringBootConfiguration
public class MyConfig {
  // 配置代碼
}

可以用在測試類中加載額外的配置類。

@LocalServerPort

這個是一個非常有用的注解,它可以為測試獲取啟動的嵌入式服務器實例的實際端口號。

主要作用和用法如下:

自動注入啟動的服務器端口號

在測試類中,可以像下面這樣使用@LocalServerPort注解:

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class MyTest {
  @LocalServerPort
  private int port;
  // 測試方法可以使用port變量
}

這樣就可以拿到隨機分配的端口號。

結合@Value使用

@LocalServerPort也可以和@Value結合使用:

@Value("${local.server.port}")
private int port;

測試端點

有了端口號,可以通過測試端點進行驗證:

@Autowired
private TestRestTemplate restTemplate;
@Test
public void test() {
  String body = this.restTemplate.getForObject("http://localhost:" + port + "/hello", String.class);
  assertEquals("Hello World", body);
}

模擬客戶端

使用@LocalServerPort可以非常方便的模擬客戶端,對運行的服務進行端到端集成測試。

@AutoConfigureMockMvc

這個是Spring Boot提供的一個便捷的注解,可以用來自動配置MockMvc,方便在測試類中直接注入并使用MockMvc。

主要作用如下:

自動注入MockMvc

在測試類中,可以直接注入MockMvc:

@Autowired
private MockMvc mvc;

不需要自己配置MockMvc。

結合@WebMvcTest使用

@AutoConfigureMockMvc經常和@WebMvcTest一起使用,對控制器進行單元測試:

@WebMvcTest
@AutoConfigureMockMvc
public class TestController {
  @Autowired
  private MockMvc mvc;
  @MockBean
  private UserService userService;
  @Test
  public void test() throws Exception {
    // 使用MockMvc進行請求測試
  }
}

模擬HTTP請求

有了MockMvc,可以輕松模擬各種HTTP請求來測試控制器:

// GET
mvc.perform(get("/users"))
  .andExpect(status().isOk()); 
// POST  
mvc.perform(post("/users"))
  .andExpect(status().isCreated());
// 模擬參數
mvc.perform(get("/users").param("name", "test"))
  .andExpect(content().string(containsString("test")));

驗證響應

可以通過MockMvc對響應結果進行驗證:

mvc.perform(get("/users/1"))
  .andExpect(status().isOk())
  .andExpect(content().contentType(MediaType.APPLICATION_JSON)) 
  .andExpect(jsonPath("$.name").value("Test User")); 

總之,@AutoConfigureMockMvc可以靈活地模擬HTTP請求,并驗證響應,使得測試Web層變得非常方便。它通常與@WebMvcTest注解配合使用,為 Spring Boot的測試提供了很大的便利。

到此這篇關于SpringBoot中@Test的介紹和使用的文章就介紹到這了,更多相關SpringBoot @Test使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java發(fā)起http請求獲取返回的Json對象方法

    java發(fā)起http請求獲取返回的Json對象方法

    下面小編就為大家分享一篇java發(fā)起http請求獲取返回的Json對象方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Apache?Hudi異步Clustering部署操作的掌握

    Apache?Hudi異步Clustering部署操作的掌握

    這篇文章主要介紹了Apache?Hudi異步Clustering部署操作的掌握,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-03-03
  • 如何在java 8 stream表達式實現(xiàn)if/else邏輯

    如何在java 8 stream表達式實現(xiàn)if/else邏輯

    這篇文章主要介紹了如何在java 8 stream表達式實現(xiàn)if/else邏輯,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java生成由時間組成的訂單號方式

    Java生成由時間組成的訂單號方式

    這篇文章主要介紹了Java生成由時間組成的訂單號方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Jmeter多用戶并發(fā)壓力測試過程圖解

    Jmeter多用戶并發(fā)壓力測試過程圖解

    這篇文章主要介紹了Jmeter多用戶并發(fā)壓力測試過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Mybatis 查詢語句條件為枚舉類型時報錯的解決

    Mybatis 查詢語句條件為枚舉類型時報錯的解決

    這篇文章主要介紹了Mybatis 查詢語句條件為枚舉類型時報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot集成redis實現(xiàn)分布式鎖的示例代碼

    SpringBoot集成redis實現(xiàn)分布式鎖的示例代碼

    這篇文章主要介紹了SpringBoot集成redis實現(xiàn)分布式鎖的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • java線程同步操作實例詳解

    java線程同步操作實例詳解

    這篇文章主要介紹了java線程同步操作,結合實例形式分析了Java線程同步與鎖機制相關原理、操作技巧與注意事項,需要的朋友可以參考下
    2018-09-09
  • 基于java實現(xiàn)的ECC加密算法示例

    基于java實現(xiàn)的ECC加密算法示例

    這篇文章主要介紹了基于java實現(xiàn)的ECC加密算法,簡單說明了ECC算法的概念、原理,并結合實例形式分析了java實現(xiàn)ECC加密算法的定義與使用技巧,需要的朋友可以參考下
    2017-08-08
  • Java中線程上下文類加載器超詳細講解使用

    Java中線程上下文類加載器超詳細講解使用

    這篇文章主要介紹了Java中線程上下文類加載器,類加載器負責讀取Java字節(jié)代碼,并轉換成java.lang.Class類的一個實例的代碼模塊。本文主要和大家聊聊JVM類加載器ClassLoader的使用,需要的可以了解一下
    2022-12-12

最新評論