我想用Rhino.Mocks
来模拟ControllerContext
对象,以便在我的控制器单元测试中访问像User,Request,Response和Session这样的运行时对象。我已经写了下面的方法来模拟控制器。如何使用Rhino.Mocks来模拟ControllerContext
private TestController CreateTestControllerAs(string userName)
{
var mock = MockRepository.GenerateStub<ControllerContext>();
mock.Stub(con =>
con.HttpContext.User.Identity.Name).Return(userName);
mock.Stub(con =>
con.HttpContext.Request.IsAuthenticated).Return(true);
var controller = CreateTestController(); // left out of example for brevity
controller.ControllerContext = mock;
return controller;
}
但是,我嘲笑ControllerContext的HttpContext
为空,有我尝试访问HttpContext.User
等引起System.NullReferenceException
。
我在做什么错误与我的嘲笑?
这工作得很好。仍然必须将一个对象放在'HttpContext.User'属性中,但这很容易通过执行:'HttpContext.User = new GenericPrincipal(new GenericIdentity(loginName),null);' – ahsteele 2010-06-21 03:16:49