2015-05-25 150 views
0

我對TDD相當新,我試圖嘲笑MVC應用程序中的HttpContextBase。我還需要模擬Response屬性和HttpCookieCollection。嘲笑密封類與RhinoMocks

雖然HttpCookieCollection類是封閉的,RhinoMocks說它不能模擬密封類。

任何意見,我應該如何解決這個問題。

我的測試是在下面:

[TestMethod] 
    public void CreateSignInTicketCreateTempCookie() 
    { 
     const string email = "[email protected]"; 

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

回答

2

我想說的嘲諷HttpCookieCollection是不是有點過頭偷拿東西 - 它只是一個存儲Cookie的方式 - 你不會嘲笑的IList<Cookie>,你會嗎?

根本就

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

或類似的(未使用犀牛嘲笑所以不知道這是否是完全正確的)。

+0

謝謝 - 對不起,我是一個新的嘲弄新,所以沒有想到這樣做。 –

+0

不需要道歉。另一個技巧是改變你的最後一行來讀取'Assert.AreEqual(1,mockHttpContextBase.Response.Cookies.Count)' - 如果它失敗了,它會給你一個更有意義的輸出。 –

+0

好的,謝謝了。 –