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
会根据接口自动解析类型

浙公网安备 33010602011771号