Moq'ing HttpContext.Current

时间:2011-09-07 12:01:24

标签: unit-testing moq httpcontext

我有一个类库,它有一个基于模板发送电子邮件的方法。我通过以下方式访问模板:

HttpContext.Current.Server.MapPath("email template path");

现在,在编写单元测试时,我希望能够模拟出“当前上下文”,我尝试使用MVCMockHelpers,但“Current”属性始终返回null。

是否可以模拟此属性?如果是这样我该怎么办呢?

1 个答案:

答案 0 :(得分:3)

我会考虑你是否更好地完全删除对HttpContext的依赖,并将路径作为字符串参数单独传递给方法。

如果您还在同一个库中的其他地方依赖HttpContext,那么您需要依赖HttpContextBase而不是直接调用HttpContext。您应该在调用站点或作为构造函数注入参数传递它。

创建一个模拟HttpContext已被许多其他人很好地介绍,包括Craig Stuntz的here。这至少可以帮助您入门,但可能需要根据您的特定测试要求进行修改。