0
HttpClientのインスタンスを作成してメソッドを呼び出し、非同期モードで応答を返すクラスがあります。MSフェイクを使った単体テスト:HttpClientと待ち受け
ReadAsAsyncでは、 "System.Net.Http.Formatting"というパッケージを使用しています。
ソースコード:
public class MyClass
{
readonly HttpClient client = new HttpClient();
public MyClass()
{
string myUrl = ConfigurationManager.AppSettings["MyWebAPI"];
client.BaseAddress = new Uri(myUrl);
}
public async Task<List<YourClass>> GetYourClass()
{
var filters = "string";
HttpResponseMessage response = await client.GetAsync(filters).ConfigureAwait(false);
if (response.IsSuccessStatusCode)
{
var notes = await response.Content.ReadAsAsync<List<YourClass>>();
return notes;
}
return null;
}
}
public class YourClass
{
private string Address { get; set; }
public YourClass(string address)
{
Address = address;
}
}
単体テスト:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
using (ShimsContext.Create())
{
MyClass obj = new MyClass();
ShimHttpClient shimHttpClient = new ShimHttpClient();
ShimHttpClient.Constructor = (t) =>
{
shimHttpClient = new ShimHttpClient();
shimHttpClient.GetAsyncString = (a) =>
{
return new System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage>(function1);
};
};
var returnVal = obj.GetYourClass();
}
}
private System.Net.Http.HttpResponseMessage function1()
{
return new System.Net.Http.HttpResponseMessage();
}
}
私たちは、ソースコードを変更することはできません。ダミーコールテストを介してユニットテストGetAsyncとReadAsAyncコールを行う必要があります。あなたのテストは、非同期実行とする
なぜからの応答を待ちますか?それらはあなたのクラスではなく、.NETに組み込まれています。これは 'int'や' string'の単体テスト方法を尋ねるようなものです。あなたはおそらくそれらを模倣する方法を尋ねているので、あなたは 'MyClass'と' GetYourClass'をテストできますか? –
これらのメソッドをテストする方法 – user2323308
しないでください。あなたはする必要はありません。 URLが間違っている場合、またはサーバーから応答が返ってきた場合、ユーザーが何をするかはすでに分かっています。 .NETのものではなく、テストが必要な*あなたのコード*です。 HttpClientをモックしたい場合は、独自のHttpMessageHandlerをコンストラクタ –