2016-04-19 20 views
2

RESTサービスからいくつかのデータを取得する簡単な方法があるとしましょう。メソッドは次のようになります。単純なRESTクライアントの単体テスト

public string GetDataFromRest(string uri) { 
string result = String.Empty; 

using(WebClient web = new WebClient()) { 
    result = web.DownloadString(uri); 
} 

return result; 
} 

これで、このメソッドの単体テストを作成します。私は外部のRESTサービスを使用したくないのですが、実際のサービスに接続することなく、あらゆるURIからの偽の応答を求めています。ユニットテスト - >でGetDataFromRest(uri)を実行するたびに、何かが常にXMLを返します。

答えて

1

posted answerに詳細が記載されているので、問題の一部はWebClientクラスに依存していることです。 WebClient用のサンプル・ラッパーがどのように見える可能性が

public interface IWebClient 
{ 
    string DownloadString(string address); 
} 

public class WebClientWrapper : IWebClient 
{ 
    public string DownloadString(string address) 
    { 
     using(WebClient web = new WebClient()) { 
      return result = web.DownloadString(uri); 
     } 
    } 
} 

public class MyClass 
{ 

    private readonly IWebClient _webClient; 

    public MyClass(IWebClient webClient) 
    { 
     _webClient = webClient; 
    } 

    public string GetDataFromRest(string uri) 
    { 
     return _webClient.DownloadString(uri); 
    } 
} 

今すぐもちろん、このルートを行くことWebClientWrapperは「あまり本当の」URIまたはあなたは、具体的に制御することを何でテストユニットとすることができることを意味します。私はWebClientの1つのメソッドしか実装していませんでしたが、返されるデータを模擬できるように、GetDataFromRest内の依存関係を実際のURIから外部化しています。これはまた、WebClientが必要な場合に役立ちます。これで、ラッパークラスを使用できるようになり、戻り値のデータを簡単にモックすることができます。

+0

ありがとうございました!それは私のコードで他のPOST、PUTなどの変更がたくさんありますが、チャームのように動作します:)。 –

関連する問題