2017-06-23 13 views
0

スタブを使用してC#コードのユニットテスト中にHTTPクライアントを模擬するにはどうすればよいですか?スタブを使用してC#でhttpclientをモックする方法

静的だけど仮想ではないhttpクライアントインスタンスを作成する方法があるので、私はMoqを使いたくありません。

コード:あなたは自分のIHttpClient非静的を作ることができず、工場を取り除くのはなぜ

public static class HttpClientFactory 
{ 
    public static IHttpClient httpClient; 

    public static IHttpClient CreateHttpClient() 
    { 
     if(httpClient == null) 
      httpClient = new HttpClient(); 
     return httpClient; 
    } 
} 
+0

静的クラス/メソッドがよくユニットテストに向いていない(コンストラクタまたはプロパティで)それを注入し、その後、IHttpClientをあざけりとメソッドを実装します。これは[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のようです。あなたが達成しようとしている究極の目標は何ですか? – Nkosi

+1

静的なクラスとメソッドの問題は、それらを模擬実装で簡単に置き換えることができないことです。最初のリファクタは、工場を通常のクラスにし、必要なときにいつでも注入するインタフェースを実装し、そのインタフェースを模擬して偽のHTTPクライアントを取得することです。 – Alejandro

答えて

2

public interface IHttpClient {} 
public class HttpClient : IHttpClient {} 

そして、ちょうど

public class SomeStuff 
{ 
    public IHttpClient Client { get; } 
    public SomeStuff(IHttpClient client) 
    { 
     Client = client; 
    } 
} 
関連する問題