2016-09-05 9 views
1

mockmvc概要と例外のシナリオを確認するには:空のコンテンツ本体は

私はSpring MVCのテストでカスタマイズされたエラーメッセージを表示して不正な要求(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 "" 

次のようにasciidocとAPIのドキュメントに生成された応答は、次のとおり

HTTP/1.1 400 Bad Request 

質問:

誰かが私のカスタマイズされた例外メッセージ(「storeIdが空です」)を使って悪い要求を受け取る方法を見つけるのを助けることができれば、私は感謝します。生成されたAPIドキュメントに追加され、 APIドキュメント:

HTTP/1.1 400 Bad Request, 
storeId is empty 
+1

これをチェックしましたか? http://stackoverflow.com/questions/28324994/empty-exception-body-in-spring-mvc-test – abaghel

+0

このリンクを確認していただきありがとうございます。問題はデュオから例外処理まででした – saeedj

答えて

0

問題は私のコードで例外処理に関連していました。テストクラスの@SpringApplicationConfigurationへの例外ハンドラであるGlobalControllerExceptionHandlerクラスを追加することを忘れました。だから次のように追加した後、私の問題は解決した:

@SpringApplicationConfiguration(classes = { 
     MemberRestControllerTest.class, 
     MemberRestController.class, 
     ResourceResultProcessor.class, 
     GlobalControllerExceptionHandler.class 
}) 
public class MemberRestControllerTest { 
     ... 
} 
関連する問題