Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 使用mockmvc检查异常场景时内容正文为空_Spring_Exception_Testing_Message_Mockmvc - Fatal编程技术网

Spring 使用mockmvc检查异常场景时内容正文为空

Spring 使用mockmvc检查异常场景时内容正文为空,spring,exception,testing,message,mockmvc,Spring,Exception,Testing,Message,Mockmvc,概述: 我将在SpringMVC测试中使用定制的错误消息测试错误请求(400)。测试状态为400;但是,内容正文是空的 代码片段如下所示: @Before public void setup() { MockitoAnnotations.initMocks(this); memberServiceController.setMemberDetailsApiController(mockMemberDetailsApiController);

概述:

我将在SpringMVC测试中使用定制的错误消息测试错误请求(400)。测试状态为400;但是,内容正文是空的

代码片段如下所示:

@Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        memberServiceController.setMemberDetailsApiController(mockMemberDetailsApiController);
        memberServiceController.setResourceMessage(mockResourceMessage);

        mockMvc = MockMvcBuilders.webAppContextSetup(context)
                .addFilter(new ShallowEtagHeaderFilter())
                .apply(documentationConfiguration(restDocumentation))
                .build();
    }

@Test
    public void getMemberDetails_whenStoreIdIsNull_setStatusToBadRequest() throws Exception {
        Mockito.doReturn("storeId is empty").when(mockResourceMessage).getMessage(MEMBER_ERROR_INVALID_STOREID);

        mockMvc.perform(get(URL)
                .header(REQUEST_HEADER_COOKIE, DEFAULT_COOKIE_VALUE)
                .param(REQUEST_PARAM_MEMBERSHIP_IDENTIFIER, "MEMBER1"))
                .andDo(MockMvcResultHandlers.print())
                .andDo(document("memberServices/GetMemberDetailsNullStoreId",
                        requestHeaders(
                                headerWithName(REQUEST_HEADER_COOKIE).description(REQUEST_HEADER_COOKIE_DESCRIPTION)
                        ),
                        requestParameters(
                                parameterWithName(REQUEST_PARAM_MEMBERSHIP_IDENTIFIER).description(REQUEST_PARAM_MEMBERSHIP_IDENTIFIER_DESCRIPTION)
                        )))
                .andExpect(status().isBadRequest())
                .andExpect(content().string(containsString("storeId is empty".toLowerCase())))
                .andReturn().getResponse();
    }
MockHttpServletRequest:
      HTTP Method = GET
      Request URI = /retailer1/memberDetails
       Parameters = {membershipIdentifier=[MEMBER1]}
          Headers = {Cookie=[SESSION=67421bc3-36da-4b64-9aca-94edf57211f6]}

Handler:
             Type = com.blss.retailServices.memberServices.restServices.MemberRestController
           Method = public org.springframework.http.HttpEntity<org.springframework.hateoas.Resource<com.blss.retailServices.memberServices.models.MemberDetailsResponseModel>> com.blss.retailServices.memberServices.restServices.MemberRestController.getMemberDetails(com.blss.retailServices.memberServices.models.MemberModel)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = com.blss.retailServices.InvalidRequestException

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 400
    Error message = null
          Headers = {}
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

java.lang.AssertionError: Response content
Expected: a string containing "storeid is empty"
     but: was ""
HTTP/1.1 400 Bad Request
引发的异常如下所示:

@Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        memberServiceController.setMemberDetailsApiController(mockMemberDetailsApiController);
        memberServiceController.setResourceMessage(mockResourceMessage);

        mockMvc = MockMvcBuilders.webAppContextSetup(context)
                .addFilter(new ShallowEtagHeaderFilter())
                .apply(documentationConfiguration(restDocumentation))
                .build();
    }

@Test
    public void getMemberDetails_whenStoreIdIsNull_setStatusToBadRequest() throws Exception {
        Mockito.doReturn("storeId is empty").when(mockResourceMessage).getMessage(MEMBER_ERROR_INVALID_STOREID);

        mockMvc.perform(get(URL)
                .header(REQUEST_HEADER_COOKIE, DEFAULT_COOKIE_VALUE)
                .param(REQUEST_PARAM_MEMBERSHIP_IDENTIFIER, "MEMBER1"))
                .andDo(MockMvcResultHandlers.print())
                .andDo(document("memberServices/GetMemberDetailsNullStoreId",
                        requestHeaders(
                                headerWithName(REQUEST_HEADER_COOKIE).description(REQUEST_HEADER_COOKIE_DESCRIPTION)
                        ),
                        requestParameters(
                                parameterWithName(REQUEST_PARAM_MEMBERSHIP_IDENTIFIER).description(REQUEST_PARAM_MEMBERSHIP_IDENTIFIER_DESCRIPTION)
                        )))
                .andExpect(status().isBadRequest())
                .andExpect(content().string(containsString("storeId is empty".toLowerCase())))
                .andReturn().getResponse();
    }
MockHttpServletRequest:
      HTTP Method = GET
      Request URI = /retailer1/memberDetails
       Parameters = {membershipIdentifier=[MEMBER1]}
          Headers = {Cookie=[SESSION=67421bc3-36da-4b64-9aca-94edf57211f6]}

Handler:
             Type = com.blss.retailServices.memberServices.restServices.MemberRestController
           Method = public org.springframework.http.HttpEntity<org.springframework.hateoas.Resource<com.blss.retailServices.memberServices.models.MemberDetailsResponseModel>> com.blss.retailServices.memberServices.restServices.MemberRestController.getMemberDetails(com.blss.retailServices.memberServices.models.MemberModel)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = com.blss.retailServices.InvalidRequestException

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 400
    Error message = null
          Headers = {}
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

java.lang.AssertionError: Response content
Expected: a string containing "storeid is empty"
     but: was ""
HTTP/1.1 400 Bad Request
问题:

现在,如果有人能帮我找到一种方法,通过我定制的异常消息(“storeId为空”)获取错误请求,以便添加到生成的API文档中,并在API文档中生成类似以下内容的响应,我将不胜感激:

HTTP/1.1 400 Bad Request, 
storeId is empty 

问题与代码中的异常处理有关。我忘了在我的测试类中将GlobalControllerExceptionHandler类添加到@SpringApplicationConfiguration中,该类是我们的异常处理程序。因此,在添加以下内容后,我的问题解决了:

@SpringApplicationConfiguration(classes = {
        MemberRestControllerTest.class,
        MemberRestController.class,
        ResourceResultProcessor.class,
        GlobalControllerExceptionHandler.class
})
public class MemberRestControllerTest {
        ...
}

你检查过这个了吗?谢谢,我可以在检查这个链接后解决它。这个问题是由异常处理引起的