在ASP.NET Web窗体中测试演示者

时间:2010-03-09 19:42:45

标签: asp.net unit-testing mvp

我正在使用MVP模式处理ASP.NET WebForm应用程序。对于每个Web窗体,都有一个与处理UI和业务逻辑相关联的Presenter类。但是,在为演示者编写单元测试时遇到问题,因为会话值在演示者中使用。并且在执行单元测试期间不存在HTTP上下文(BTW我使用nUnit),因此无法为演示者编写单元测试。

任何人都可以解释如何对这些演示者进行单元测试吗?

谢谢

3 个答案:

答案 0 :(得分:1)

您可以模拟或存根IHttpContext并让您的框架注入真正的HttpContext,或者您可以将会话,cookie,...状态包装在一些接口后面,或者您可以使用Pex中的“Moles”,接口是这里解释http://haacked.com/archive/2007/09/09/ihttpcontext-and-other-interfaces-for-your-duck-typing-benefit.aspx

答案 1 :(得分:1)

您可以更改Presenter类以依赖HttpContextBase。完成后,您可以向演示者类提供模拟版本的HttpContext以进行测试。在生产中,您只需提供HttpContext.Current属性。

答案 2 :(得分:1)

嗯,我会建议另一种方法。 我认为您的演示者不应该知道HttpContext,PageLifeCycle等,因为您必须单独测试它。因此,不要试图模拟IHttpContext,而是尝试在演示者中提取所需的值(您不需要整个httpcontext对象,只需要会话中的某些值,cookie等)并通过presenter构造函数注入演示者。现在你可以正确测试它。

干杯