0
Ich habe Klasse, die Instanz von HttpClient erstellt und einige Methoden aufrufen und Antwort im asynchronen Modus zurückgibt.Unit Test mit MS-Fake: HttpClient und warten
Für ReadAsAsync habe ich nuget Paket "System.Net.Http.Formatting" verwendet.
Source Code:
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;
}
}
Einheit Test:
[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();
}
}
Wir können nicht den Quellcode ändern. aber GetAnsync- und ReadAsAync-Aufrufe müssen über Dummy-Aufruftest in Unit-Test durchgeführt werden.
Warum laufen? Das sind keine * Ihre * Klassen, sie sind in .NET integriert. Es ist, als würde man fragen, wie man "int" oder "string" in Einheiten testet. Fragen Sie vielleicht, wie man sie * vortäuscht *, damit Sie 'MyClass' und' GetYourClass' testen können? –
wie Sie diese Methoden testen – user2323308
Nicht. Das musst du nicht. Sie wissen bereits, was sie tun werden, wenn die URL falsch ist oder wenn der Server eine Antwort zurückgibt. Es ist * Ihr Code *, der testet, nicht .NET. Wenn Sie HttpClient vortäuschen möchten, übergeben Sie Ihren eigenen HttpMessageHandler an den Konstruktor –