首页 > 解决方案 > 执行 Mock Controller 时出现 NullPointerexception

问题描述

我的控制器类中有以下代码

public class GoodsController{

@AutoWired
Private GoodsService goodsService;
public ResponseEntity<String> startCall(HttpServletRequest request) {

        ResponseEntity<String> responseEntity = null;

        try {
            ResponseBean respBean = goodsService.startCall(request);
            HttpHeaders responseHeaders = new HttpHeaders();

            if(request.getAttribute(SessionConstants.GOODS_SESS) != null){
                responseHeaders.set(SessionConstants.GOODS_SESS,      request.getAttribute(SessionConstants.GOODS_SESS).toString());
            }

            responseEntity = new ResponseEntity<>(SessionUtil.objToJson(respBean, respBean), responseHeaders,
                    HttpStatus.valueOf(respBean.getStatus()));

            return responseEntity;

        } catch (AlightSessionException e) {
            StringBuilder message = new StringBuilder("{\"message\": \"error:\""+e.getMessage()+", ")
                    .append("\"status\":\"400\"}");
            responseEntity = new ResponseEntity<>(message.toString(), HttpStatus.BAD_REQUEST);
            ErrorLogEventHelper.logErrorEvent(SessionController.class.getName(), message.toString(), "startSessionForPerson()", e,
                    ErrorLogEvent.ERROR_SEVERITY);      
            return responseEntity;
        }

    }
}

我的 TestClass 中有以下代码

   public class GoodsControllerTest{

    MockHttpServletRequestBuilder request = 

    MockMvcRequestBuilders
                    .post("/startCall").sessionAttr("personToken", "eyjpc");

            ResultActions result = mockMvc.perform(request);
             result.andExpect(MockMvcResultMatchers.status().isOk());

    }
  }

当我执行时出现以下错误,请帮助我。

org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 java.lang.NullPointerException 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 在 javax.servlet .http.HttpServlet.service(HttpServlet.java:648) 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 在 org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java :65) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 在 org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) 在 org.springframework.mock.web。模拟过滤器链。

标签: mockito

解决方案


您需要使用MockMvcBuilders.standaloneSetup仅使用您的控制器创建应用程序上下文,然后使用此 mockMcv 调用您的控制器 API 即方法

您可以参考这篇文章了解更多详情。


推荐阅读