gpt4 book ai didi

c# - 如何在Moq框架中模拟HttpContext(ControllerContext),并进行 session

转载 作者:太空狗 更新时间:2023-10-29 23:22:56 26 4
gpt4 key购买 nike

我想测试我的 MVC 应用程序,我想模拟 HttpContext。我正在使用 Moq 框架,这是我为模拟 HttpContext 所做的:

[SetUp]
public void Setup()
{
MyUser myUser = new MyUser();
myUser.Id = 1;
myUser.Name = "AutomatedUITestUser";

var fakeHttpSessionState =
new FakeHttpSessionState(new SessionStateItemCollection());
fakeHttpSessionState.Add("__CurrentUser__", myUser);

ControllerContext mockControllerContext = Mock.Of<ControllerContext>(ctx =>
ctx.HttpContext.User.Identity.Name == myUser.Name &&
ctx.HttpContext.User.Identity.IsAuthenticated == true &&
ctx.HttpContext.Session == fakeHttpSessionState &&
ctx.HttpContext.Request.AcceptTypes ==
new string[]{ "MyFormsAuthentication" } &&
ctx.HttpContext.Request.IsAuthenticated == true &&
ctx.HttpContext.Request.Url == new Uri("http://moqthis.com") &&
ctx.HttpContext.Response.ContentType == "application/xml");

_controller = new SomeController();
_controller.ControllerContext = mockControllerContext; //this line is not working
//when I see _controller.ControllerContext in watch, it get's me
//_controller.ControllerContext threw an exception of type System.ArgumentException
}

[Test]
public void Test_ControllerCanDoSomething()
{
// testing an action of the controller
// The problem is, here, System.Web.HttpContext.Current is null
}

因为我的应用程序几乎在每个操作方法中都使用 Session 来保存用户数据和身份验证信息,因此我需要设置 HttpContext 并在其中设置 Session 并将 __CurrentUser__ 放入 session 中,以便操作方法可以访问伪造的登录用户。

但是,HttpContext 未设置且为空。我搜索了很多,但找不到我的答案。可能出了什么问题?

更新:我也在下面测试,得到相同的结果

_controller.ControllerContext = new ControllerContext(
mockControllerContext.HttpContext, new RouteData(), _controller);

最佳答案

根据这个答案判断:Mocking Asp.net-mvc Controller Context

看起来您需要模拟 Request 本身,以及请求对象的属性。

例如

var request = new Mock<HttpRequestBase>();

等(完整代码在链接的答案中)。

关于c# - 如何在Moq框架中模拟HttpContext(ControllerContext),并进行 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22200691/

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