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提供了測試相關(guān)的工具類,如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參數(shù)來指定測試環(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相關(guān)的Bean,會自動配置Spring Data JPA相關(guān)的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變量
}這樣就可以拿到隨機分配的端口號。
結(jié)合@Value使用
@LocalServerPort也可以和@Value結(jié)合使用:
@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。
結(jié)合@WebMvcTest使用
@AutoConfigureMockMvc經(jīng)常和@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());
// 模擬參數(shù)
mvc.perform(get("/users").param("name", "test"))
.andExpect(content().string(containsString("test")));驗證響應
可以通過MockMvc對響應結(jié)果進行驗證:
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的測試提供了很大的便利。
到此這篇關(guān)于SpringBoot中@Test的介紹和使用的文章就介紹到這了,更多相關(guān)SpringBoot @Test使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Apache?Hudi異步Clustering部署操作的掌握
這篇文章主要介紹了Apache?Hudi異步Clustering部署操作的掌握,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-03-03
如何在java 8 stream表達式實現(xiàn)if/else邏輯
這篇文章主要介紹了如何在java 8 stream表達式實現(xiàn)if/else邏輯,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04
SpringBoot集成redis實現(xiàn)分布式鎖的示例代碼
這篇文章主要介紹了SpringBoot集成redis實現(xiàn)分布式鎖的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01

