mockMVC使用

mockMVC使用

本文介绍mockMVC与spring-boot结合使用

example

@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
@AutoConfigureMockMvc
public class MVCApplicationTest {
    @Autowired
    MockMvc mockMvc;
    @Autowired
    WebApplicationContext webApplicationContext;
    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }
    @Test
    public void test1() throws Exception {
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/userList")).andReturn();
        System.out.println(mvcResult.getResponse().getContentAsString());
    }
}
  • .perform() 执行一个MockMvcRequestBuilders请求。
  • .get()表示发送get请求(可以使用get、post、put、delete等);
  • .contentType()设置编码格式;
  • .param()请求参数,可以带多个。
  • andExpect()添加 MockMvcResultMatchers验证规则,验证执行结果是否正确。
  • .andDo()添加 MockMvcResultHandlers结果处理器,这是可以用于打印结果输出。
  • .andReturn()结果还回,然后可以进行下一步的处理。

网上的例子

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MockXXXTest {
    @Autowired
    protected MockMvc mockMvc;
    //使用mock对象代替原来spring的bean,然后模拟底层数据的返回,而不是调用原本真正的实现
    @MockBean
    private XXXDao xxxtDao;
    @Test
    public void TestXXX() throws Exception {
        List<Map<String,Object>> dataList= new ArrayList<>();
        Map m=new HashMap();
        m.put("name","test");
        dataList.add(m);      
 //这里的when(…).thenReturn(…)表示的是:当定义(when)对象、方法和参数(输入),然后(thenReturn) 中返回结果(输出)。默认情况下,所有的函数都有返回值。mock函数默认返回的是null,一个空的集合或者一个被对象类型包装的内置类型,例如:0、false对应的对象类型为Integer、Boolean。
Mockito.when(xxxDao.findMapBySql(Mockito.anyString(),Mockito.anyList())).thenReturn(dataList);       Mockito.when(xxxDao.findTotalCountBySql(Mockito.anyString(),Mockito.any())).thenReturn((long)1);
        MvcResult result = mockMvc.perform(
                MockMvcRequestBuilders.get("/xxxController/xxx_query")
                        .contentType(MediaType.APPLICATION_JSON_UTF8)      
                        .param("xxx","xxx")          
        )
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
        System.out.println(result);
    }
}

注意:使用param时只能穿String,但mock会根据接口自动解析类型

posted @ 2020-12-08 09:17  WheelCode  阅读(703)  评论(0)    收藏  举报