Controller的測試(MockMvc的使用)

控制層接口的測試,可以用瀏覽器、PostMan或者Idea自帶的工具(Tools-->HTTP Client-->Test RESTFul Web Service)進行測試都可以。當以上方式都不容易進行的測試的時候,可以使用MockMvc對象,mock 對象就是真實對象在調試期間的代替品。

 

下面介紹下MockMvc的簡單使用:

Controller的方法如下:

    @PostMapping("/goShopping")
    public ModelAndView goShopping(String shopName) {
        log.info(shopName);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("user/shopping");
        User user = new User("river", "123456");
        modelAndView.addObject("user", user);
        return modelAndView;
    }

 測試類如下:

/**
 * @author river
 * 2020/1/30
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserControllerTest {

    @Autowired
    private WebApplicationContext webContext;

    private MockMvc mockMvc;

    @Before
    public void setUp() {
        mockMvc = MockMvcBuilders
                .webAppContextSetup(webContext)
                .build();
    }

    @Test
    public void goShopping() throws Exception {
        User user = new User("river", "123456");

        mockMvc.perform(MockMvcRequestBuilders.post("/user/goShopping")
                .contentType(MediaType.APPLICATION_FORM_URLENCODED).param("shopName","riverMall"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.view().name("user/shopping"))
                .andExpect(MockMvcResultMatchers.model().attributeExists("user"))
                .andExpect(MockMvcResultMatchers.model().attribute("user", Matchers.samePropertyValuesAs(user)));
    }
}

mockMvc對象的請求,可以設置請求方式、請求類型、請求參數等等,並且可以對返回的視圖名、參數等進行判斷,用得好的話,也是一個不錯的技能!

發佈了86 篇原創文章 · 獲贊 144 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章