在下边的Mock测试中,mock了前端请求,mock后端返回响应,Mockmvc会向发出http请求,通过http获得mock的响应,但不知道为什么始终在获得响应response后,分析其中的content的时候报空指针错误,查看response里边的content长度为0,没有返回,status=400,说明前端请求参数有问题,打印了一下JSON.toJSONString(rq),发现请求中的少了一个必填请求属性,比如下边的Request中的name属性,明明设置了但是变成Json字符串后为空,原来是因为加了@transient注解的属性无法被序列化,前端请求参数与Controller需要的不符引起的。
为什么要加@transient?因为有些敏感信息不想在网络中传输,所以防止被序列化。
@InjectMocks
private Controller controller
@Test
public void test(){
//组装前端请求
Request rq = new Request();
rq.setName("aaa");
//mock服务
doReturn(mockData())
.when(controller)
.test(rq)
//构建接口响应
ResultActions result = mockMvc.perform(MockMvcRequestBuilders.post(url))
.content(JSON.toJSONString(rq))
//接收响应
MockHttpServletResponse response = result.andReturn().getResponse();
}
private String mockData(){
return "mockdata";
}