我正在尝试使用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;
}
但是,那HttpContext
我模拟的 ControllerContext 为空,我尝试访问HttpContext.User
等引起System.NullReferenceException
.
我的嘲笑做错了什么?
我强烈推荐你看看MVCContrib.TestHelper它使用Rhino.Mocks
并提供了一种优雅的方式来测试您的控制器。您的测试可能如下所示:
[TestClass]
public class UsersControllerTests : TestControllerBuilder
{
[TestMethod]
public void UsersController_Index()
{
// arrange
// TODO : this initialization part should be externalized
// so that it can be reused by other tests
var sut = new HomeController();
this.InitializeController(sut);
// At this point sut.Request, sut.Response, sut.Session, ... are
// stubed objects on which you could define expectations.
// act
var actual = sut.Index();
// assert
actual.AssertViewRendered();
}
}
这是一个单元测试 for a 控制器这是一个示例 ASP.NET MVC 应用程序我写。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)