我写一个单元测试和控制方法是抛出一个异常,因为HttpContext的/ ControllerContext为空。 我不需要从HttpContext的断言什么,只需要它是不是NULL。 我已经做了研究,我相信起订量是答案。 但这一切,我所看到的样品都没有对我帮助很大。 我不需要做什么特别的,只是嘲笑的HttpContext。 点我在正确的方向!
Answer 1:
得到了这两个功能在这里的一类;
public static class HttpContextFactory
{
public static void SetFakeAuthenticatedControllerContext(this Controller controller)
{
var httpContext = FakeAuthenticatedHttpContext();
ControllerContext context =
new ControllerContext(
new RequestContext(httpContext,
new RouteData()), controller);
controller.ControllerContext = context;
}
private static HttpContextBase FakeAuthenticatedHttpContext()
{
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
var session = new Mock<HttpSessionStateBase>();
var server = new Mock<HttpServerUtilityBase>();
var user = new Mock<IPrincipal>();
var identity = new Mock<IIdentity>();
context.Setup(ctx => ctx.Request).Returns(request.Object);
context.Setup(ctx => ctx.Response).Returns(response.Object);
context.Setup(ctx => ctx.Session).Returns(session.Object);
context.Setup(ctx => ctx.Server).Returns(server.Object);
context.Setup(ctx => ctx.User).Returns(user.Object);
user.Setup(ctx => ctx.Identity).Returns(identity.Object);
identity.Setup(id => id.IsAuthenticated).Returns(true);
identity.Setup(id => id.Name).Returns("a.ali174");
return context.Object;
}
}
从单元测试我打电话给他们本身;
HttpContextFactory.SetFakeAuthenticatedControllerContext(controller);
请确保您有起订量安装在您的测试项目:
Install-Package Moq
Answer 2:
我知道这是一个老话题,但惩戒了单元测试MVC应用程序是我们做的非常定期的东西。
我只是想升级到Visual Studio 2013年没有单元测试后加入我的经验用嘲讽起订量4 MVC 3应用程序在调试模式下进行工作,HttpContext的是试图展示在变量偷看时,“无法计算表达式” 。
原来的Visual Studio 2013有评估某些对象的问题。 为了得到调试工作再次嘲笑的Web应用程序,我必须勾选“使用托管兼容模式”,在工具=>选项=>调试=>基本设置。
文章来源: How to mock httpcontext so that it is not null from a unit test?