比如说,我们在某个函数中需要利用HttpClient通过SendAsync方法从某个EndPoint获取数据进行处理。但是在local测试的时候不一定能够连上那个EndPoint,或者不能保证那个EndPoint会返回什么东西。所以我们可以写mock一个ResponseHandler,这样我们就可以把mock的返回结果放进httpClient中传给需要测试的模块,这样就可以测试该模块内后续部分的处理了。
internal class MockResponseHandler : DelegatingHandler
{
public HttpStatusCode StatusCode { get; set; }
public HttpContent Content { get; set; }
protected override async Task SendAsync(HttpRequestMessage request,
System.Threading.CancellationToken cancellationToken)
{
return await ReturnRespsonse();
}
private Task ReturnRespsonse()
{
var response = new HttpResponseMessage()
{
StatusCode = this.StatusCode,
Content = this.Content
};
return Task.Run(() => response);
}
}
var successHttpClient = new HttpClient(
new MockResponseHandler
{
StatusCode = HttpStatusCode.OK
});
var forbidHttpClient = new HttpClient(
new MockResponseHandler
{
StatusCode = HttpStatusCode.Forbidden,
Content = new StringContent(testError)
});
实际上,.NET中现在很多mock对象的框架供选择(参见http://www.mockobjects.org ),很多常用的mock都可以直接使用框架,而不需要自己去写。
4. 帮助你更好地进行单元测试的工具
NUnit
ReShaper
奈何家里的笔记本下载它们一直失败,所以这里先给个链接,以后有机会再介绍一下它们吧(⊙﹏⊙)b
参考文献:
《单元测试之道C#版》
单元测试之道C#版 第一章
单元测试 百度百科
谈谈单元测试之(一):为什么要进行烦人的单元测试?
C#中的单元测试
A Unit Testing Walkthrough with Visual Studio Team Test
文/丑小丫大笨蛋(简书作者)
原文链接:http://www.jianshu.com/p/7984955720e2
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文转自:http://www.jianshu.com/p/7984955720e2