在上一篇,項目基本實現了Spring Boot對Mybatis的整合。這篇文章使用Mockito對項目進行測試。
1、使用postmat測試;
2、編寫單元測試類,使用mockito進行測試;
3、使用idea內置工具進行測試
運行AicodeBgmsApplication.java,啟動項目后,可以采用如下方式對接口進行測試。
一、使用postman進行測試
如上圖所示進行測試,其他接口請自行測試。
二、編寫單元測試類進行測試
這里使用Idea輔助我們創建單元測試類
在要測試的類,如:UserInfoController.java類中點擊右鍵,再點擊Go To,再點擊Test,如下圖所示:
或者點擊菜單上的Navigate,然后點擊Test,選擇Create New Test...
然后進入下面界面,如下:
確定要測試的類和包路徑,把編寫單元測試的方法都選中,然后點擊OK。單元測試類即可生成。
編寫的測試代碼如下:UserInfoControllerTest.java
-
package com.aicode.bgms.controller;
-
-
import org.junit.After;
-
import org.junit.Before;
-
import org.junit.Test;
-
import org.junit.runner.RunWith;
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.boot.test.context.SpringBootTest;
-
import org.springframework.test.context.junit4.SpringRunner;
-
import org.springframework.test.web.servlet.MockMvc;
-
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
-
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
-
import org.springframework.transaction.annotation.Transactional;
-
import org.springframework.util.LinkedMultiValueMap;
-
import org.springframework.util.MultiValueMap;
-
import org.springframework.web.context.WebApplicationContext;
-
-
import
static org.junit.Assert.*;
-
-
@RunWith(SpringRunner.class)
-
@Transactional
-
@SpringBootTest
-
public
class UserInfoControllerTest {
-
-
private MockMvc mockMvc;
-
-
@Autowired
-
private WebApplicationContext wac;
-
-
@Before
-
public void setUp() throws Exception {
-
this.mockMvc = MockMvcBuilders.webAppContextSetup(
this.wac).build();
-
}
-
-
@After
-
public void tearDown() throws Exception {
-
}
-
-
@Test
-
public void list() throws Exception {
-
String mvcResult= mockMvc.perform(MockMvcRequestBuilders.get(
"/list"))
-
.andReturn().getResponse().getContentAsString();
-
System.out.println(
"Result === "+mvcResult);
-
}
-
-
@Test
-
public void add() throws Exception {
-
final MultiValueMap<String, String> params =
new LinkedMultiValueMap<>();
-
params.add(
"userName",
"test2");
-
params.add(
"password",
"pass1234");
-
params.add(
"age",
"12");
-
params.add(
"email",
"test@aicode.com");
-
String mvcResult= mockMvc.perform(MockMvcRequestBuilders.post(
"/add")
-
.params(params)).andReturn().getResponse().getContentAsString();
-
System.out.println(
"Result === "+mvcResult);
-
}
-
-
@Test
-
public void get() throws Exception {
-
String mvcResult= mockMvc.perform(MockMvcRequestBuilders.get(
"/get/1"))
-
.andReturn().getResponse().getContentAsString();
-
System.out.println(
"Result === "+mvcResult);
-
}
-
-
@Test
-
public void modify() throws Exception {
-
final MultiValueMap<String, String> params =
new LinkedMultiValueMap<>();
-
params.add(
"id",
"1");
-
params.add(
"userName",
"test1");
-
params.add(
"password",
"123qwe");
-
params.add(
"age",
"24");
-
params.add(
"email",
"test@aicode.com");
-
String mvcResult= mockMvc.perform(MockMvcRequestBuilders.put(
"/edit")
-
.params(params)).andReturn().getResponse().getContentAsString();
-
System.out.println(
"Result === "+mvcResult);
-
}
-
-
@Test
-
public void del() throws Exception {
-
mockMvc.perform(MockMvcRequestBuilders.delete(
"/del/2"))
-
.andReturn();
-
String mvcResult= mockMvc.perform(MockMvcRequestBuilders.get(
"/list"))
-
.andReturn().getResponse().getContentAsString();
-
System.out.println(
"Result === "+mvcResult);
-
}
-
-
}
- @SpringBootTest —— SpringBoot 自 1.4.0 版本開始引入的一個用於測試的注解;
- @RunWith(SpringRunner.class) ——代表運行一個 Spring 容器;
- @Transactional——可以使單元測試進行事務回滾,以保證數據庫表中沒有因測試造成的垃圾數據,再就是保證單元測試可以反復執行;
- @Before—— 代表在測試啟動時候需要提前加載的內容,這里是提前加載 MVC 環境。
執行UserInfoControllerTest.java,然后下面是執行單元測試的結果
關於MockMvc進行單元測試如果不太清楚,可以先百度一下做一下基本了解。
可以點擊每個測試方法,查看具體的測試結果
這樣,我們使用MockMvc就完成了對Controller層的測試。Service層和Dao層也可以使用MockMvc進行測試,這里就不再進行說明,請讀者自行嘗試。
三、使用Idea中的工具進行測試
運行AicodeBgmsApplication.java,啟動項目。
點擊菜單中的Tools——〉Test Restful Web Service,然后在窗口輸入參數進行測試。
添加:
點擊左側的綠色右向三角標運行,然后可以看到返回結果。
查詢:
點擊左側的綠色右向三角標運行,然后可以看到返回結果。
測試時,請求HTTP method的匹配。