2016-10-17 20 views
0

特定の状況では500というサーバーエラーで応答するRESTfulサービスの統合テストを作成しようとしていますが、問題を詳述するメッセージこのレスポンスボディを取得するためには、私のコードは、カスタムエラーハンドラを使用して、何かのように:MockRestServiceServerを使用したSpringのRestTemplateのテスト - エラーが500回あっても返されたボディの使用

@Test 
public void testHealthyResponse() { 
    MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate); 
    mockServer.expect(requestTo("/someUri")).andExpect(method(HttpMethod.GET)) 
     .andRespond(withSuccess(HEALTHY_RESPONSE, MediaType.APPLICATION_JSON)); 
    restTemplate.setErrorHandler(new Allow500ResponseErrorHandler()); 

    MyCustomResult result = restTemplate 
     .exchange("/someUri", HttpMethod.GET, null, 
      new ParameterizedTypeReference<MyCustomResult>() { 
      }).getBody(); 
    // assertThat(... tests go here...); 

    mockServer.verify(); 
} 

(:「健康」応答のための統合テストを行い、これは、正常に動作します

public class Allow500ResponseErrorHandler implements ResponseErrorHandler { 
    @Override 
    public boolean hasError(ClientHttpResponse response) throws IOException { 
    HttpStatus statusCode = response.getStatusCode(); 
    return !HttpStatus.OK.equals(statusCode) 
     && !HttpStatus.INTERNAL_SERVER_ERROR.equals(statusCode); 
    } 

    @Override 
    public void handleError(ClientHttpResponse response) throws IOException { 
    log.error("Unexpected response code: {} {}", response.getStatusCode(), 
     response.getStatusText()); 
    } 
} 

しかし、私は「不健康」応答のための私の統合テストで同じエラーハンドラを設定した場合でも、私は

を取得する場合はもちろんの HEALTHY_RESPONSEは、JSONの静的期待健全な反応である。)

を期待がある以外は0

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class my.package.MyCustomResult] and content type [application/octet-stream] 
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:110) 
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:809) 
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:793) 
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:572) 
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:530) 
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:476) 
at [my test code] 

セットアップは、上記のようなものである:

mockServer.expect(requestTo("/someUri")).andExpect(method(HttpMethod.GET)) 
    .andRespond(withServerError().body(UNHEALTHY_RESPONSE)); 

(これは、使用しているばねウェブ4.1.7のRestTemplateとスプリングテスト4.1.7のMockRestServiceServer。)

どのように有用なボディを持つサーバエラー応答をシミュレートしますか?私は何が欠けていますか?

答えて

0

エラーメッセージは少し誤解を招いていましたが、and content type [application/octet-stream]は私にヒントを与えてください。

私は(DOH)を行うために必要なすべての期待にメディアタイプを設定しました:

mockServer.expect(requestTo("/someUri")).andExpect(method(HttpMethod.GET)) 
    .andRespond(withServerError().body(UNHEALTHY_RESPONSE) 
    .contentType(MediaType.APPLICATION_JSON)); 
関連する問題