参考文章:http://blog.csdn.net/bclz_vs/article/details/6902638

http://www.cnblogs.com/PurpleTide/archive/2011/03/31/2001366.html

http://hi.baidu.com/xiaoduo170/item/a4f79a79c8bc733e71442358

在做单元测试的时候HttpContext.Current是为null的

而有些dll是和HttpContext绑定的(很大原因是...net大部分用于web项目)

或者是试图在windows form 或者console中使用这些dll就挂了...

当然HttpContext.Current是可以赋值的...那么最最简单的方法就是直接new一个HttpContext给它啦

HttpRequest request = new HttpRequest("", "http://localhost", "");HttpContext.Current = new HttpContext(request, new HttpResponse(new System.IO.StringWriter()));最后在单元测试类中:
[TestInitialize]
public void MyTestInitialize()
{HttpContext.Current = new HttpContext(new HttpRequest("", "http://localhost", ""),new HttpResponse(new StringWriter(new StringBuilder())));
}

  ·  带有[ClassInitialize()]特性的方法在执行类中第一个测试之前调用。

    ·  带有[TestInitialize()]特性的方法在执行每个测试前都会被调用,一般用来初始化环境,为单元测试配置一个特定已知的状态。    ·  带有[ClassCleanup()]特性的方法将在类中所有的测试运行完后执行。    ·  带有[TestCleanup()]特性的方法将在每个测试运行完毕后执行,一般用来恢复环境变量到测试前的已知状态,可能是删除一个文件或者恢复数据库记录。

所以[TestInitialize()]的调用时间是在构造函数之后,TestMethod之前。
 

下表列出了这四个方法的解释和用法。

函数名

用法

[ClassInitialize()]

MyClassInitialize

这个方法会在每次调用测试方法前被自动调用。假设在调用AddTest(),DivideTest()等方法之前都需要初始化一些基本数据列表,则这个工作可以放在MyClassInitialize函数里面,不用分别写在每个测试方法里。

[ClassCleanup()]

MyClassCleanup

这个方法会在每次调用测试方法结束后被自动调用。

[TestInitialize()]

MyTestInitialize

这个方法会在每次启动一个测试过程前被自动调用。例如本次测试一共选择了AddTest(),DivideTest()两个测试方法,则在调用这两个方法前,MyTestInitialize会先被调用。与MyClassInitialize不同的是,MyClassInitialize是每次调用测试方法时都会被调用,相当于函数级的调用,MyTestInitialize则只在测试过程前会被调用一次,在测试过程结束前,不会再被调用,相当于过程级的调用。

[TestCleanup()]

MyTestCleanup

这个方法会在每次结束一个测试过程后被自动调用。

Visual Studio 之所谓把这四个函数注释掉,原因是这四个函数只是示意性函数(从名字中就可以看出)。关键是看这四个函数的方法属性[ClassInitialize()],[ClassCleanup()], [TestInitialize()], [TestCleanup()]只要把相关的属性加到相关的方法上,那么这个方法就具有的上面所描述的功能。

  • 为什么需要Mock  本文转载: http://blog.csdn.net/cooleader320/article/details/1907535
  • 单元测试的基本原则应该是每次只验证一个方法,但是倘若遇到这样一种情况:
  • 测试方法依赖于其他一些难以操控的东西,如:网络,数据库。或者是你测试的代码依赖于系统的其他部分,甚至是系统的多个其他部分。在这种情况下,倘若不小心,最终可能发现自己不小心几乎初始化了系统的每一个组件,而所有这一切只是为了给某一个测试创造必要的运行环境。这不仅花费了大量的时间,要命的是这样的测试用例会被引入大量的耦合因素,很难到达“单元”测试的目的。我们该怎么办呢? 这是Mock的测试方法就派上用场了。Mock的英文的字面意思是:嘲笑,模仿,欺骗的意思。通过Mock,我们可以创建很多真实对象的替代品,在测试用例中使用它。
    • 什么情况下考虑使用Mock
    1)         真实的对象具有不可确定的行为(如:程序需要通过web service获得股票的实时价格)
    2)         对象很难被创建(如系统环境很难初始化)
    3)         真实对象的某些行为很难被触发(如网络错误,数据库ID自增序列溢出)
    4)         真实的对象令程序运行很缓慢
    5)         真实对象含有UI等不方便测试的因素
    6)         测试需要询问真实对象是如何被调用的(如异步调用的情况,需要验证Callbak的函数)
    7)         真实的对象目前还不存在(如依赖于其他项目组或则需要新的硬件系统)

转载于:https://www.cnblogs.com/51net/p/3822826.html

Unit Test单元测试时如何模拟HttpContext相关推荐

  1. java 单元测试 私有成员变量,单元测试时测试一个private私有方法 - - ITeye博客

    直接上例子 待测试的类 [code="java"]public class Calculator { private int count = 0; private int add( ...

  2. java类添加单元测试代码_如何在java中单元测试时跳过一段代码

    如果问题确实是: 如何在Java 然后我给出的答案同意单元测试时,我跳过一段代码.依赖注入,嘲讽框架绝对是真正的单元测试的正确途径. 但是,如果问题是: 使用JUnit(或其他单元测试框架) 然后我想 ...

  3. 在讨论单元测试时,“DAMP not DRY”是什么意思?

    本文翻译自:What does "DAMP not DRY" mean when talking about unit tests? I heard someone say tha ...

  4. SSM中进行Junit单元测试时无法注入service

    场景 在SSM项目中进行Junit单元测试时调用外部的service时,在使用时打断点发现为空. 代码如下: public class AlipayTester {private PassOrderS ...

  5. Junit单元测试时提示:Method should have no parameters

    场景 Junit中运行单元测试时提示: Method XXX should have no parameters 如图: 代码如下: package com.ws.test.common;import ...

  6. SSM+Maven+Eclipse进行单元测试时提示找不到Config配置项/文件

    场景 在Eclipse+SSM+Maven中进行单元测试时,会提示Config配置文件/信息找不到 原因 在测试类中调用了正常业务中的方法/接口,而在方法中有用到常量的地方, 而常量又是在封装的常量类 ...

  7. C语言unit test单元测试类的实现(附完整源码)

    C语言unit test单元测试类的实现 unit test单元测试类的定义pUnitTest.h(完整源码) unit test单元测试类的定义pUnitTest.cpp(完整源码) unit te ...

  8. java报错空指针异常_分析使用Spring Boot进行单元测试时,报出空指针异常

    使用Spring Boot进行单元测试时,发现使用@Autowired注解的类无法自动注入,当使用这个类的实例的时候,报出NullPointerException,即空指针异常. Spring Boo ...

  9. 单元测试时使用Ninject的小问题

    主要是Kernel没有被释放,Ninject的Kernel必须调用IDispose释放.也有可能是静态类型在VS单元测试时无法被释放. 先记录下这个问题 转载于:https://www.cnblogs ...

最新文章

  1. 关于AD编程的一些资料
  2. 8种优秀预训练模型大盘点,NLP应用so easy!
  3. 关于JTable的使用
  4. NoSQL 之 Morphia 操作 MongoDB
  5. amazeui学习笔记--css(HTML元素4)--图片image
  6. 10.2.1 关于vc++不支持把类的成员函数定义为类的友元函数的处理
  7. cdh jar包 sqoop2_安装sqoop1.4.6-cdh5.5.2
  8. php endall(),ob_end_flush
  9. 关于写好文章的3个心法和5点技巧
  10. hdu 1512 Monkey King 左偏树
  11. 买房前需要注意的事项有哪些
  12. 动态加载JavaScript文件
  13. 分析JQ作者的类实现过程
  14. 20211213软件测试基础达内视频笔记
  15. VScode+Latex:代码和pdf互相跳转
  16. 《论文排版札记》part1 论文公式编号—WPS版
  17. python 通达信公式函数,python使用通达信公式,请人用python编写如下公式,我对编程一窍不通...
  18. shader拖尾_插件(一)武器拖尾效果
  19. 实战技能分享,如何让工程代码各种优化等级通吃,含MDK AC5,AC6,IAR和GCC
  20. 东芝有刷直流电机驱动器IC TB67H450FNG

热门文章

  1. 王道 —— 操作系统的概念(定义)、功能和目标
  2. CS224n——lecture3课程导学
  3. MySQL之User(用户)和Privilege(权限)
  4. Golang预备知识
  5. Linux学习笔记9
  6. Java图形开发--GUI
  7. java smtp_java通过smtp发送电子邮件
  8. 斑能不能彻底去掉_海鲜不能和什么一起吃
  9. python该怎样使用_Python 应该怎么去练习和使用?
  10. 修改数据_如何批量修改数据库中的特定记录数据