【问题标题】:Mocking Sealed Class with RhinoMocks用 RhinoMocks 模拟密封类
【发布时间】:2015-05-25 15:42:43
【问题描述】:

我对 TDD 相当陌生,我正在尝试在 MVC 应用程序中模拟 HttpContextBase。我还需要模拟 Response 属性和它的 HttpCookieCollection。

HttpCookieCollection 类是密封的,RhinoMocks 说它不能模拟密封的类。

关于我应该如何解决这个问题的任何建议。

我的测试如下:

    [TestMethod]
    public void CreateSignInTicketCreateTempCookie()
    {
        const string email = "dave@somewhere.co.uk";

        var mockHttpContextBase = MockRepository.GenerateMock<HttpContextBase>();
        var response = MockRepository.GenerateMock<HttpResponseBase>();

        var mockUserRepository = MockRepository.GenerateStub<IUserRepository>();
        var cookieCollection = MockRepository.GenerateStub<HttpCookieCollection>();

        mockHttpContextBase.Stub(x => x.Response).Return(response);

        response.Stub(x => x.Cookies).Return(cookieCollection);

        var webAuth = new WebAuthenticator(mockUserRepository);

        webAuth.CreateSignInTicket(mockHttpContextBase, email);

        Assert.IsTrue(mockHttpContextBase.Response.Cookies.Count == 1);
    }

【问题讨论】:

    标签: c# unit-testing tdd rhino-mocks


    【解决方案1】:

    我会说模拟 HttpCookieCollection 有点太过分了——这只是一种存储 cookie 的方式——你不会模拟 IList&lt;Cookie&gt;,对吗?

    简单的做

    response.Stub(x => x.Cookies).Return(new HttpCookieCollection());
    

    或类似(未使用 Rhino Mocks,因此不确定这是否完全正确)。

    【讨论】:

    • 谢谢 - 对不起,我是一个新的模拟新手,所以没想到这样做。
    • 无需道歉。另一个提示是将最后一行更改为 Assert.AreEqual(1, mockHttpContextBase.Response.Cookies.Count) - 如果失败,它将为您提供更有意义的输出。
    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多