使用Moles框架实现HttpWebRequest与HttpWebResponse的单元测试
有时程序使用HttpWebRequest与HttpWebResponse实现HTTP的访问,但我们想测试它们不太容易实现。现在我们可以使用Moles框架来实现对它的单元测试。如果您还不了解Moles,可以先到官方网站看这个文档。下面我们来看片段代码:
[TestMethod] [HostType("Moles")] [Description("Testing with moles assemblies")] public void Get_KnownUrl_ReturnsExpectedValue() {var mockedWebResponse = new MHttpWebResponse();MHttpWebRequest.AllInstances.GetResponse = (x) =>{return mockedWebResponse;};var googleUri = new Uri("http://www.google.com");mockedWebResponse.StatusCodeGet = () => { return HttpStatusCode.OK; };mockedWebResponse.ResponseUriGet = () => { return googleUri; };mockedWebResponse.ContentTypeGet = () => { return "testHttpResponse"; };string mockedResponseStr = @"<html> \r\n" +" <head></head> \r\n" +" <body> \r\n" +" <h1>Hello World</h1> \r\n" +" </body> \r\n" +"</html>";mockedWebResponse.ContentLengthGet = () => { return mockedResponseStr.Length; };using (var memoryStream = new MemoryStream()){using (var sw = new StreamWriter(memoryStream)){sw.Write(mockedResponseStr);sw.Flush();memoryStream.Seek(0, SeekOrigin.Begin);mockedWebResponse.GetResponseStream = () => memoryStream;//actvar request = WebRequest.Create("http://www.google.com");var response = (HttpWebResponse)request.GetResponse();// Assertstring htmlContent = null;using (var streamReader = new StreamReader(response.GetResponseStream())){htmlContent = streamReader.ReadToEnd();}Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);Assert.AreEqual(mockedResponseStr.Length, response.ContentLength);Assert.AreEqual(mockedResponseStr, htmlContent);Assert.AreEqual(googleUri, response.ResponseUri);}} }
上面的基于MsTest的代码引用Moles生成的System.Moles.dll,HttpWebRequest与HttpWebResponse是在System.dll里的所以生成它。一开始对一些属性与方法的Mock操作,引用的是那些生成的MolesAssembiles,看字面意思可以了解代码的意图。接着模拟请求Google网站,返回我们遇先设置好返回的HtmlString,最后在验证中验证Stream,HttpStatusCode和Length是否一致。 当然您也可以测试其它属性成方法。注意最后请求的类是真实的类,可以演示我们把它们写在一起了。实际中可能是某个真实环境的API之类的方法。
希望对您开发有帮助。
您可以感兴趣的文章:
使用Moles对静态方法做UnitTest
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。
转载于:https://www.cnblogs.com/wintersun/archive/2012/01/07/2315588.html
使用Moles框架实现HttpWebRequest与HttpWebResponse的单元测试相关推荐
- C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse
上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式 HttpWebRequest以及HttpWebResponse 自认为与上次介绍的WebClient最大的不同之 ...
- HttpWebRequest与HttpWebResponse进行数据采集时的注意点
一般的数据采集使用WebClient可以很方便的进行,但是一些比较复杂(指需要较多的设置请求标头,以及重定向)的采集一般会使用HttpWebRequest或HttpWebResponse. 在需要给当 ...
- C# -- HttpWebRequest 和 HttpWebResponse 的使用
C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebRequest 和 HttpWebResponse,来判断一个网页地址是否可以正常访问. 1 ...
- HttpWebRequest以及HttpWebResponse
上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式 HttpWebRequest以及HttpWebResponse 自认为与上次介绍的WebClient最大的不同之 ...
- 利用HttpWebRequest和HttpWebResponse做黑客注射工具
利用HttpWebRequest和HttpWebResponse做黑客注射工具. using System; using System.Collections.Generic; using Syste ...
- C#使用HttpWebRequest和HttpWebResponse上传文件示例
C#使用HttpWebRequest和HttpWebResponse上传文件示例 1.HttpHelper类: 复制内容到剪贴板程序代码 using System; using System.Coll ...
- React Native 实践之携程 Moles 框架
编者:本文来自携程框架研发部高级经理魏晓军在第二期[携程技术微分享]上的分享,以下为整理后的文字实录.视频回放可点击这里.关注携程技术中心微信公号ctriptech,可获知更多微分享课程信息. 因为支 ...
- React Native之携程Moles框架
http://blog.csdn.net/xiangzhihong8/article/details/51756319 因为支持用JavaScript开发原生应用,React Native一推出就受到 ...
- React Native实践之携程Moles框架
声明:本文CSDN作者原创投稿文章,未经许可禁止任何形式的转载. 编者:本文来自携程框架研发部高级经理魏晓军在第二期[携程技术微分享]上的分享,以下为整理后的文字实录.关注携程技术中心微信公号ctri ...
最新文章
- BCH(比特币现金)的货币流通速度是BTC的6倍
- python tqdm包_python tqdm库的使用
- Synchronize对象锁
- 转载:【Data Management】PhotoLocations源程序
- 数据采集之用户区域(USER)事件
- python 功能键ord_ord()函数以及Python中的示例
- 支付361万元“家庭抚养费”后,贾跃亭向法院申请与甘薇离婚?
- 《数学之美》—图论和网络爬虫
- 【SSM】SSM框架介绍
- 电脑字母,电脑英文字母大小写怎么转换
- WIN10锁屏久了宕机(死机)解决方案
- 洛谷P2678 Java解法
- 可以用php做出一个圆锥吗,用H5制作水滴特效教程
- 机械学习04:概率统计中T检测、Z检测和F检测区别和案例
- 网络广告术语CPC、CPM和CTR的含义和关系
- 基于cmake配置使用CGAL
- 文本分类:垃圾邮件分类
- 医药公司的绩效管理体系搭建案例
- Maven 聚合与继承
- android_汇总