使用RhinoMocks模拟密封类

时间:2015-05-25 15:42:44

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

我对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);
    }

1 个答案:

答案 0 :(得分:2)

我会说嘲讽HttpCookieCollection让事情变得有点过分 - 这只是一种存储饼干的方式 - 你不会嘲笑IList<Cookie>,不是吗?

简单地做

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

或类似(不使用Rhino Mocks所以不确定这是否完全正确)。