如何使用 JUnit 自動化測試mvc接口(model)
一般正常的 restful
接口我們可以很方便的寫出測試用例, 但是遇到有 Model
的 Controller
方法就比較難過了, 我之前找了很多方法(方向是如何構造Model), 但是都沒找到解決方案, 知道我偶然發現 MockMvc
這個東西, 於是就有了解決方案, 本文就講解如何使用 Junit
進行mvc
接口的測試
JUnit: 個迴歸測試框架, 方便我們對代碼進行測試, 特別是在重構(修改)後驗證代碼的功能邏輯是否依然正確, 被開發者用於實施對應用程序的單元測試, 加快程序編制速度,同時提高編碼的質量
如果還不知道什麼是JUnit
請移步
簡單講解
難點就在與這個 Model
對象的構造, 無法使用 Spring
的自動注入來初始化 Model
, 使用 new
也不現實(這個是個接口), 所以對於這種 controller
方法要麼就只測試內部的 service
邏輯, 要麼就改寫一下改成無 Model
參數的(破壞代碼結構, 不優雅), 現在有了 MockMvc
就能自動幫我們解決這個 Model
的問題, 而且還能將生成的視圖輸出到 console
我們要做的就是在單元測試調用 controller
方法錢將 MockMvc
構造出來, 然後利用 MockMvc
內部的方法進行 controller
方法的調用
關鍵源碼
引入部分
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;
代碼部分
@Before
: 測試前需要自動執行的註解(方法上)MockMvc
: 我們需要用到的模擬MVC
對象
private MockMvc mockMvc;
@Before
public void setup() {
// webAppContextSetup 注意上面的static import
// webAppContextSetup 構造的WEB容器可以添加fileter 但是不能添加listenCLASS
// WebApplicationContext context =
// ContextLoader.getCurrentWebApplicationContext();
// 如果控制器包含如上方法 則會報空指針
this.mockMvc = webAppContextSetup(this.wac).build();
}
接口調用寫法
mockMvc.perform((get("/要測試的接口地址"))).andExpect(status().isOk()).andDo(print());