0

Wiremock を使用して Java REST クライアントをテストしています。特に、空の応答をどのように処理するかをテストしています。

テスト中のコード:

public Content makeRequest(...) { 
    try {
        ResponseEntity response = restTemplate.exchange(...);
        if(response.getStatusCode() != 200) {
           throw new BadStatusCodeException(response.getStatusCode());
        }
        return extractContent(response);
    } catch (IOException e) {
        throw new ProtocolException(e);
    }    
}

テスト:

Wiremock.stubFor(put(urlPathEqualTo("/foo"))
            .willReturn(aResponse().withFault(EMPTY_RESPONSE)));

thrown.expect(ProtocolException.class);

client.makeRequest();

このテストはローカル マシンではパスしますが、ビルド マシンでは失敗し、BadStatusExceptionステータス コード 500 がスローされます。

私の最善の推測では、私のローカル マシンでは RestTemplate が Wiremock サーバーに直接接続されていますが、ビルド マシンでは、おそらく環境変数などが原因で、接続はプロキシ経由で行われています。 WireMock によってシミュレートされた障害が発生すると、500 エラーが返されます。

RestTemplate次のように、Apache HttpClient の使用を強制します。

ClientHttpRequestFactory httpRequestFactory = 
    new HttpComponentsAsyncClientHttpRequestFactory();
RestTemplate restTemplate = new RestTemplate(httpRequestFactory);

...問題は解決したようですが、このライブラリに余分な依存関係を持ち込みたくありません(このライブラリの消費者は、好きなように構成された独自のRestTemplateを注入します)。

私の理論はもっともらしいですか?これが起こっていることをどのように確認できますか?RestTemplate を強制的に直接接続するにはどうすればよいですか? 他にどのような説明があり得るでしょうか?

4

0 に答える 0