【问题标题】:NullPointerexception when executing Mock Controller执行 Mock Controller 时出现 NullPointerexception
【发布时间】:2019-04-25 00:18:37
【问题描述】:

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

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.MockFilterChain.doFilter(MockFilterChain.java:134) 在 org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:155) 在 com.alight.upoint.sessionservice.controller.SessionControllerTest.testGetEligiblePlans(SessionControllerTest.java:57) 在 org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) 在 org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) 在 org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 在 org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 在 org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 引起:java.lang.NullPointerException 在 com.alight.upoint.sessionservice.controller.SessionController.startSessionForPerson(SessionController.java:51) 在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ... 17 更多

【问题讨论】:

    标签: mockito


    【解决方案1】:

    你需要使用 MockMvcBuilders.standaloneSetup 来创建一个只有你的控制器的应用程序上下文,然后使用这个 mockMcv 来调用你的控制器 API 即方法

    您可以参考this post了解更多详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2019-03-24
      相关资源
      最近更新 更多