有时程序使用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的单元测试相关推荐

  1. C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse

    上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式 HttpWebRequest以及HttpWebResponse 自认为与上次介绍的WebClient最大的不同之 ...

  2. HttpWebRequest与HttpWebResponse进行数据采集时的注意点

    一般的数据采集使用WebClient可以很方便的进行,但是一些比较复杂(指需要较多的设置请求标头,以及重定向)的采集一般会使用HttpWebRequest或HttpWebResponse. 在需要给当 ...

  3. C# -- HttpWebRequest 和 HttpWebResponse 的使用

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebRequest 和 HttpWebResponse,来判断一个网页地址是否可以正常访问. 1 ...

  4. HttpWebRequest以及HttpWebResponse

    上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式 HttpWebRequest以及HttpWebResponse 自认为与上次介绍的WebClient最大的不同之 ...

  5. 利用HttpWebRequest和HttpWebResponse做黑客注射工具

    利用HttpWebRequest和HttpWebResponse做黑客注射工具. using System; using System.Collections.Generic; using Syste ...

  6. C#使用HttpWebRequest和HttpWebResponse上传文件示例

    C#使用HttpWebRequest和HttpWebResponse上传文件示例 1.HttpHelper类: 复制内容到剪贴板程序代码 using System; using System.Coll ...

  7. React Native 实践之携程 Moles 框架

    编者:本文来自携程框架研发部高级经理魏晓军在第二期[携程技术微分享]上的分享,以下为整理后的文字实录.视频回放可点击这里.关注携程技术中心微信公号ctriptech,可获知更多微分享课程信息. 因为支 ...

  8. React Native之携程Moles框架

    http://blog.csdn.net/xiangzhihong8/article/details/51756319 因为支持用JavaScript开发原生应用,React Native一推出就受到 ...

  9. React Native实践之携程Moles框架

    声明:本文CSDN作者原创投稿文章,未经许可禁止任何形式的转载. 编者:本文来自携程框架研发部高级经理魏晓军在第二期[携程技术微分享]上的分享,以下为整理后的文字实录.关注携程技术中心微信公号ctri ...

最新文章

  1. BCH(比特币现金)的货币流通速度是BTC的6倍
  2. python tqdm包_python tqdm库的使用
  3. Synchronize对象锁
  4. 转载:【Data Management】PhotoLocations源程序
  5. 数据采集之用户区域(USER)事件
  6. python 功能键ord_ord()函数以及Python中的示例
  7. 支付361万元“家庭抚养费”后,贾跃亭向法院申请与甘薇离婚?
  8. 《数学之美》—图论和网络爬虫
  9. 【SSM】SSM框架介绍
  10. 电脑字母,电脑英文字母大小写怎么转换
  11. WIN10锁屏久了宕机(死机)解决方案
  12. 洛谷P2678 Java解法
  13. 可以用php做出一个圆锥吗,用H5制作水滴特效教程
  14. 机械学习04:概率统计中T检测、Z检测和F检测区别和案例
  15. 网络广告术语CPC、CPM和CTR的含义和关系
  16. 基于cmake配置使用CGAL
  17. 文本分类:垃圾邮件分类
  18. 医药公司的绩效管理体系搭建案例
  19. Maven 聚合与继承
  20. android_汇总

热门文章

  1. emacs 新手笔记(四) —— 使用 dired 完成一些简单的文件和目录操作
  2. MC34063组成DC-DC电路
  3. 滚动数组~\(≧▽≦)/~
  4. JButton 做图片框
  5. 82%开源软件兼容Windows
  6. pymysql的安装
  7. Python OpenCV人脸识别案例
  8. yum仓库、源以及编译安装笔记
  9. webpack4.0各个击破(2)—— CSS篇
  10. 让Python中类的属性具有惰性求值的能力