采坑之mock单元测试报空指针错误:NullPointerException,@transient属性无法被序列化

 在下边的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";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值