Maven依賴信息
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- test end -->
</dependencies>
定義一個REST接口
定義一個實體類Demo
public class Demo {
private String name;
// setter, getter...
}
新建一個Controller類,定義一個查詢方法喳坠。
URL為GET demos
茂蚓,調(diào)用成功后將返回一個json數(shù)組,http返回碼為200 OK晾浴。
@Controller
@RequestMapping("demos")
public class DemoController {
@GetMapping
public ResponseEntity<List> searchDemo() {
return new ResponseEntity<>(new ArrayList<Demo>(), HttpStatus.OK);
}
}
編寫測試用例
對于單元測試來說只需要關(guān)注Controller層牍白,而不需要加載整個Spring上下文。
// 告訴junit使用MockitoJUnitRunner來運行測試用例
// 這樣就可以使用@Mock和@InjectMocks注解
@RunWith(MockitoJUnitRunner.class)
public class MockDemoControllerTest {
private MockMvc mockMvc;
@InjectMocks
private DemoController demoController; // 創(chuàng)建demoController
@Before
public void setUp() throws Exception {
// 構(gòu)造mockMvc狸涌,指定需要測試的Controller對象
mockMvc = MockMvcBuilders.standaloneSetup(demoController).build();
}
@Test
public void should_get_demos() throws Exception {
// 調(diào)用此接口并斷言返回 200 OK
mockMvc.perform(get("/demos")).andDo(print())
.andExpect(status().isOk());
}
}
運行成功后將會打印以下信息
測試通過
總結(jié)
在本篇小文中介紹了如何針對Spring Boot編寫的REST接口進行測試,用到了spring-tes
提供的MockMvc
實現(xiàn)對HTTP請求的模擬。除此之外懒豹,測試中還利用MockMvc
提供的驗證工具對結(jié)果進行斷言。
本文只能算是一個開頭何陆,示例項目中并沒有調(diào)用任何業(yè)務邏輯豹储,我將在下一篇中講述如何mock依賴關(guān)系。