gpt4 book ai didi

asp.net-mvc-3 - 如何模拟httpcontext,以使其在单元测试中不为null?

转载 作者:行者123 更新时间:2023-12-04 18:12:16 25 4
gpt4 key购买 nike

我正在编写单元测试,并且ControllerContext抛出异常,因为HttpContext/ControllerContext为null。我不需要从HttpContext声明任何内容,只需要它不为NULL。我已经进行了研究,我相信起订量是答案。但是我所看到的所有样本都帮不了我很多。我不需要做任何花哨的事情,只是为了模拟httpcontext。为我指明正确的方向!

最佳答案

在类中从here获得了这两个函数;

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);

确保在测试项目中安装了 Moq:
Install-Package Moq

关于asp.net-mvc-3 - 如何模拟httpcontext,以使其在单元测试中不为null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11245059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com