gpt4 book ai didi

ASP.NET MVC5 : Unit Testing a controller with a session

转载 作者:行者123 更新时间:2023-12-02 10:47:54 25 4
gpt4 key购买 nike

我读过很多关于模拟 session 对象或使用假对象的博客和评论,但我仍然无法将这些答案转换为我自己的代码。

这是我的 UserController 的索引操作,它使用依赖项注入(inject)将 IUserRepository 注入(inject)到构造函数中:

// GET: User
public ActionResult Index()
{
User user = (User) Session["CurrentUser"];
if (user != null) {
if(_repository.UserHasAdminAcces(user))
return View(_repository.GetAllUsers().ToList());

return RedirectToAction("DisplayErrorPage", "Error", new { errorMessage = "You have to be an Admin to enter this part" });
}
return RedirectToAction("Login");
}

我的测试方法目前如下所示:

public void TestIndexForValidUser()
{
var mock = new Mock<IUserRepository>();
mock.Setup(x => x.UserHasAdminAcces(It.IsAny<User>())).Returns(true);

UserController target = new UserController(mock.Object);

// create mock HttpContext
var context = new Mock<ControllerContext>();

target.ControllerContext = context.Object;

var result = target.Index() as ViewResult;

Assert.AreEqual(result, "Index");

}

我想给 ControllerContext 一个返回假用户的 session 对象,并确保返回一个名为 Index 的 View

最佳答案

我使用这种方法:

var controller = new HomeController();
var context = MockRepository.GenerateStub<ControllerContext>();
context.Expect(x => x.HttpContext.Session["MyKey"]).Return("MyValue");
controller.ControllerContext = context;

参见 ScottGu 的 blog post .

关于ASP.NET MVC5 : Unit Testing a controller with a session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29124257/

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