Spring Boot下編寫Controller層單元測試(一)

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接口進(jìn)行測試,用到了spring-tes提供的MockMvc實現(xiàn)對HTTP請求的模擬。除此之外,測試中還利用MockMvc提供的驗證工具對結(jié)果進(jìn)行斷言。

本文只能算是一個開頭,示例項目中并沒有調(diào)用任何業(yè)務(wù)邏輯,我將在下一篇中講述如何mock依賴關(guān)系。

SpringBoot基礎(chǔ)之MockMvc單元測試

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容