加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何使用Rhino.Mocks模拟ControllerContext

发布时间:2020-12-16 06:43:23 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试使用Rhino.Mocks来模拟一个ControllerContext对象,以便在我的控制器单元测试中访问运行时对象,如User,Request,Response和Session.我写了下面的方法试图模拟一个控制器. private TestController CreateTestControllerAs(string userName){ var mock
我正在尝试使用Rhino.Mocks来模拟一个ControllerContext对象,以便在我的控制器单元测试中访问运行时对象,如User,Request,Response和Session.我写了下面的方法试图模拟一个控制器.

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为null,我尝试访问HttpContext.User等会导致System.NullReferenceException.

我的嘲笑我做错了什么?

解决方法

我强烈建议你看看使用Rhino.Mocks的 MVCContrib.TestHelper并提供一种优雅的方式来测试你的控制器.以下是您的测试结果:

[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();
    }
}

这是controller的unit test,这是我写的sample ASP.NET MVC application的一部分.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读