ASP.NET MVC单元测试 - 会话 [英] ASP.NET MVC Unit Testing - Sessions
问题描述
有搜索计算器,和谷歌我觉得我在做什么是假设是正确的,但结果似乎并不很顺利。
Having searched StackOverflow, and Google I think what I'm doing is suppose to be right, however results don't seem to be going well
[TestMethod]
public void LoginAction_Should_Return_View_and_User_Authenticated()
{
// Arrange
var mock = new Mock<ControllerContext>();
var mockSession = new Mock<HttpSessionStateBase>();
mock.Setup(p => p.HttpContext.Session).Returns(mockSession.Object);
var testData = FakeUserData.CreateTestUsers();
var repository = new FakeUserRepository(testData);
var controller = new AccountController(repository);
controller.ControllerContext = mock.Object;
// Act
var result = controller.Login("testuser1", "testuser1");
// Assert
Assert.AreEqual("testuser1", controller.HttpContext.Session["Username"]);
Assert.IsTrue((bool)controller.HttpContext.Session["IsAuthenticated"]);
Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
}
当我运行测试controller.HttpContext.Session的价值[用户名]为空,但是我的价值使用会话助手设置的用户名。我做得完全错误的,还是其他什么东西?任何帮助将大大AP preciated。
When I run the test the value of controller.HttpContext.Session["Username"] is null, however I set the value to the username using a Session helper. Am I doing something completely wrong, or something else? Any help would be greatly appreciated.
推荐答案
使用Mock.Verify检查底层code试图设置会话[用户名]。
Use Mock.Verify to check if underlying code tried to set Session["Username"].
如果您code需要设置会话变量并使用它 - 看看<一个href=\"http://weblogs.asp.net/bleroy/archive/2009/06/15/mocking-indexer-setters-with-moq.aspx\">here.
If your code needs to set session variable and use it - take a look here.
快速入门是无价的了。
这篇关于ASP.NET MVC单元测试 - 会话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!