功能實現之后,我們要養成隨手寫配套單元測試的習慣,這在微服務架構中尤為重要。通常,我們實施微服務架構的時候,已經實現了前后端分離的項目與架構部署。那么在實現后端服務的時候,單元測試是在開發過程中用來驗證代碼正確性非常好的手段,並且這些單元測試將會很好地支持我們未來可能會進行的重構。
編寫controller
package com.xc.springboot.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { /** * http://127.0.0.1:8081/hello */ @RequestMapping("/hello") public String hello() { return "hello world!"; } }
src/test/下編寫測試類
package com.xc.springboot.controller; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.setup.MockMvcBuilders; //引入下面的靜態引用,讓status、content、equalTo函數可用 import static org.hamcrest.Matchers.equalTo; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringJUnit4ClassRunner.class)//引入Spring對JUnit4的支持。 // @SpringApplicationConfiguration(classes = SpringbootApplication.class)//指定Spring Boot的啟動類。 @WebAppConfiguration//開啟Web應用的配置,用於模擬ServletContext。 public class HelloControllerTest { private MockMvc mvc; //·@Before:JUnit中定義在測試用例@Test內容執行前預加載的內容,這里用來初始化對HelloController的模擬。 @Before public void setUp() throws Exception { mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build(); } @Test public void hello() throws Exception { //·MockMvc對象:用於模擬調用Controller的接口發起請求,在@Test定義的hello測試用例中,perform函數執行一次請求調用,accept用於執行接收的數據類型,andExpect用於判斷接口返回的期望值。 mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(equalTo("hello world!"))); } }
代碼解析如下。
·@RunWith(SpringJUnit4ClassRunner.class):引入Spring對JUnit4的支持。
·@SpringApplicationConfiguration(classes =SpringbootApplication.class):指定Spring Boot的啟動類。
·@WebAppConfiguration:開啟Web應用的配置,用於模擬ServletContext。
·MockMvc對象:用於模擬調用Controller的接口發起請求,在@Test定義的hello測試用例中,perform函數執行一次請求調用,accept用於執行接收的數據類型,andExpect用於判斷接口返回的期望值。
·@Before:JUnit中定義在測試用例@Test內容執行前預加載的內容,這里用來初始化對HelloController的模擬。
注意引入下面的靜態引用,讓status、content、equalTo函數可用:
import static org.hamcrest.Matchers.equalTo; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
版本:spring-boot-starter-parent 1.5.21.RELEASE
參考:Spring Cloud微服務實戰 p51