通過Mock測試控制器
阿新 • • 發佈:2020-07-25
測試控制器最直接的辦法可能就是構建並部署應用,然後通過瀏覽器對其進行訪問,但是自動化測試可能會給你更快的反饋和更一致的獨立結果。所以,讓我們編寫一個針對HomeController
的測試。
Spring現在包含了一種mock Spring MVC並針對控制器執行HTTP請求的機制。這樣的話,在測試控制器的時候,就沒有必要再啟動Web伺服器和Web瀏覽器了。
控制器:
package spittr.web; import static org.springframework.web.bind.annotation.RequestMethod.*; import org.springframework.stereotype.Controller;import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/") public class HomeController { @RequestMapping(method = GET) public String home(Model model) { return "home"; } }
測試:
package spittr.web; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*; import org.junit.Test; import org.springframework.test.web.servlet.MockMvc; public class HomeControllerTest { @Test public void testHomePage() throwsException { HomeController controller = new HomeController(); MockMvc mockMvc = standaloneSetup(controller).build(); //搭建MockMvc mockMvc.perform(get("/")) // 對“/”執行get請求 .andExpect(view().name("home")); //預期得到home檢視 } }
發起了對“/”的GET
請求,並斷言結果檢視的名稱為home。它首先傳遞一個HomeController
例項到MockMvcBuilders.standaloneSetup()
並呼叫build()
來構建MockMvc例項。然後它使用MockMvc例項來執行鍼對“/”的GET請求並設定期望得到的檢視名稱。