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

前端之家收集整理的这篇文章主要介绍了单元测试 – Stubbing或Mocking ASP.NET Web API HttpClient前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个项目中使用新的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

猜你在找的asp.Net相关文章