加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

单元测试 – Stubbing或Mocking ASP.NET Web API HttpClient

发布时间:2020-12-15 18:52:57 所属栏目:asp.Net 来源:网络整理
导读:我在一个项目中使用新的Web API位,我发现我不能使用正常的HttpMessageRequest,因为我需要添加客户端证书到请求。因此,我使用HttpClient(所以我可以使用WebRequestHandler)。这一切都很好,除了它不是残桩/模拟友好,至少对于犀牛Mocks。 我通常会创建一个
我在一个项目中使用新的Web API位,我发现我不能使用正常的HttpMessageRequest,因为我需要添加客户端证书到请求。因此,我使用HttpClient(所以我可以使用WebRequestHandler)。这一切都很好,除了它不是残桩/模拟友好,至少对于犀牛Mocks。

我通常会创建一个环绕HttpClient的包装服务,我会改用,但我想避免这种可能,因为有很多方法,我需要包装。我希望我有缺少的东西 – 任何建议如何存根HttpClient?

解决方法

我使用Moq,我可以stub出HttpClient。我认为这一点对于犀牛Mock(我没有试过自己)。
如果你只是想存根HttpClient下面的代码应该工作:
var stubHttpClient = new Mock<HttpClient>();
ValuesController controller = new ValuesController(stubHttpClient.Object);

如果我错了,请纠正我。我想你在这里指的是在HttpClient中存根成员。

最流行的隔离/模拟对象框架将不允许您在非虚拟成员上存根/设置
例如下面的代码抛出异常

stubHttpClient.Setup(x => x.BaseAddress).Returns(new Uri("some_uri");

你还提到你想避免创建一个包装,因为你会包装很多HttpClient成员。不清楚为什么你需要包装大量的方法,但你可以轻松地包装所需的方法。

例如 :

public interface IHttpClientWrapper  {   Uri BaseAddress { get;  }     }

public class HttpClientWrapper : IHttpClientWrapper
{
   readonly HttpClient client;

   public HttpClientWrapper()   {
       client = new HttpClient();
   }

   public Uri BaseAddress   {
       get
       {
           return client.BaseAddress;
       }
   }
}

其他的选项,我认为可能会对你有好处(大量的例子,所以我不会写代码)
微软框架
http://research.microsoft.com/en-us/projects/moles/
微软假:(如果你使用VS2012终极)
http://msdn.microsoft.com/en-us/library/hh549175.aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读