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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章