2017-02-03 21 views
0

私はSpringからRestTemplateを使用したいので、Unit-Testingと同じクラスを使いたいと思います。 JSON-Fileをダウンロードしてテスト目的でローカルに保存することが考えられます。したがって、URIをHTTPからFileアドレスに変更したいと考えています。それは、ファイル・アドレスとして私はExcpetionローカルファイルテストのRestTemplate

Exception in thread "main" java.lang.IllegalArgumentException: Object of class [sun.net.www.protocol.file.FileURLConnection] must be an instance of class java.net.HttpURLConnection

urlGETList = "http://api.geonames.org/countryInfoJSON?username=volodiaL"; 
RestTemplate restTemplate = new RestTemplate(); 
CountryInfoResponse results = restTemplate.getForObject(urlGETList, CountryInfoResponse.class); 

私はユニットテストのために同じクラスを使用することができますどのように任意のアイデアを取得すると?

答えて

0

あなたはWiremockを見ることができると思います。

Wiremockでは、要求の下位処理が可能です。利点は、完全なスタックを実際にテストし、テストが模擬応答で応答するサーバーに対して実際の要求を行うことです。これらのモックレスポンスボディは、(他の可能性が同様にあります。)ファイルであることができ、あなたのユニットテストで

あなたはこのようwiremockサーバーを設定します。次に

@Rule 
public WireMockRule wireMockRule = new WireMockRule(port); 

あなたのセットアップのようなファイル応答でスタブをすることができますこの:

public void givenResponse(int statusCode, MediaType contentType, String bodyPath) { 
     String responseBody; 
     try (InputStream data = new ClassPathResource(bodyPath).getInputStream()) { 
      responseBody = copyToString(data, UTF_8); 
     } 

     stubFor(any(urlPathEqualTo(getWireMockUri().getPath())) 
       .willReturn(aResponse() 
         .withStatus(statusCode) 
         .withHeader("Content-Type", contentType.toString()) 
         .withHeader("Content-Length", String.valueOf(responseBody.length())) 
         .withBody(responseBody) 
       )); 
    } 
あなたはまた、 here

は、その後、あなたが特定のRかどうかを確認することができます説明したように、スタブファイルへの完全スタブを置くことができ

equestがなされています

verify(postRequestedFor(urlEqualTo("/form")) 
       .withHeader("Content-Type", containing(MULTIPART_FORM_DATA_VALUE))); 

あなたが要求を行うためにRestTemplateを使用する検証here

についての詳細を調べることができます。テストでlocalhostとwiremockポートを使用できるように、ホストとポートの設定が必要です。

+0

レスポンスのThx。私はそれを確認する必要がありますが、それはかなり有望なようです... – LeO

+0

@LeOあなたの検証の結果は何ですか?助けてくれたの? –