単体テストで使用するコードをラップしようとするといくつかの問題があります。問題はこれです。単体テストでHttpClientを嘲笑
public class Connection
{
private IHttpHandler _httpClient;
public Connection(IHttpHandler httpClient)
{
_httpClient = httpClient;
}
}
:クライアントの実装を注入するsimpleIOCを使用しています
public class HttpHandler : IHttpHandler
{
public HttpClient client
{
get
{
return new HttpClient();
}
}
}
そしてConnectionクラス、:
public interface IHttpHandler
{
HttpClient client { get; }
}
そして、それを使用して、クラス、のHttpHandler:私はインターフェイスIHTTPハンドラを持っていますそして、私はこのクラスを持つユニットテストプロジェクトを持っています:
private IHttpHandler _httpClient;
[TestMethod]
public void TestMockConnection()
{
var client = new Connection(_httpClient);
client.doSomething();
// Here I want to somehow create a mock instance of the http client
// Instead of the real one. How Should I approach this?
}
明らかに、バックエンドからデータ(JSON)を取得するメソッドをConnectionクラスに用意します。しかし、私はこのクラスの単体テストを書いていますが、明らかに私は実際のバックエンドに対してテストを書くのではなく、模倣したテストを書くことを望んでいます。私は大成功なしにこれに良い答えをGoogleにしようとしました。以前はMoqを使ってモックを使っていたことがありますが、httpClientのようなものでは決してできません。どのように私はこの問題に近づくべきですか?
ありがとうございます。
問題がどこにあるかです。クライアントが 'HttpClient'コンクリートクラスを使用するように強制しています。代わりに、 'HttpClient'の**抽象化**を公開する必要があります。 –
もう少し詳しく説明できますか? Connectionクラスのコンストラクタはどのように構築すればよいですか?HttpClientに他のクラスのConnectionクラスを依存させたくないからです。たとえば、ConnectionのコンストラクタにHttpClientを渡したいのですが、それはHttpClientのConnection依存型を使用する他のすべてのクラスを作成するためですか? – tjugg
興味のある、あなたは何をGoogleにしましたか?明らかにmockhttpはいくつかのSEO改善を使用する可能性があります。 –