我对测试很陌生。我试图理解我如何进行单元测试,因为我并不真的需要真正触发这些服务,但可能会模拟每一步。
如何对以下代码段进行单元测试?
public void myFunction()
{
// I am getting an auth token from a service
// then
using (HttpClient httpClient = new HttpClient())
{
// do a POST call on another service
var response = httpClient.PostAsync(url, content);
}
}
2条答案
按热度按时间yrwegjxp1#
不可重写的成员(此处为:HttpClient.PostAsync)不能在安装/验证表达式中使用。
我还尝试以您所做的相同方式模拟HttpClient,但我得到了相同的错误消息。
不可重写的成员(此处为:HttpClient.PostAsync)不能在安装/验证表达式中使用。
我还尝试以您所做的相同方式模拟HttpClient,但我得到了相同的错误消息。
解决方案:模拟HttpMessageHandler,而不是模拟HttpClient。
然后给予
mockHttpMessageHandler.Object
到您的HttpClient,然后将其传递给您的产品代码类。这是因为HttpClient在底层使用HttpMessageHandler:
注意:您还需要
在测试文件的顶部。
然后,您可以从测试中调用使用PostAsync的方法,PostAsync将返回HTTP状态OK响应:
优点:模拟HttpMessageHandler意味着您不需要在产品代码或测试代码中使用额外的类。
有用资源:
https://chrissainty.com/unit-testing-with-httpclient/
https://gingter.org/2018/07/26/how-to-mock-httpclient-in-your-net-c-unit-tests/
41zrol4v2#
模拟安排后,可通过