2011-12-19 30 views
0

我們試圖嘲弄使用RhinoMocks 一個MVC 3應用程序的HttpContext的複合材料部件看起來像這樣:建立一個結果爲一個模擬

HttpContextBase context = mocks.StrictMock<HttpContextBase>(); 
HttpRequestBase request = mocks.PartialMock<HttpRequestBase>(); 
IPrincipal user = mocks.StrictMock<IPrincipal>(); 
HttpCookieCollection cookies = new HttpCookieCollection(); 
IIdentity identity = mocks.StrictMock<IIdentity>(); 
HttpResponseBase response = mocks.PartialMock<HttpResponseBase>(); 

SetupResult.For(response.Cookies).Return(cookies); 
SetupResult.For(context.User).Return(user); 
SetupResult.For(user.Identity).Return(identity); 
SetupResult.For(context.Request).Return(request); 
SetupResult.For(context.Response).Return(response); 
mocks.Replay(context); 

在我的測試,我需要的用戶可以使認證我補充如下:「爲IIdentity.get_IsAuthenticated()的結果;已設置了」

var identity = context.User.Identity; 
mocks.BackToRecord(identity); 
SetupResult.For(identity.IsAuthenticated).Return(true).Repeat.Any(); 
mocks.Replay(identity); 

然而,這導致 異常被拋出。

爲什麼?我需要做什麼才能在我的測試中進行認證設置?

+0

@帕特里克:我看到你編輯了我的問題,你的改變是什麼性質?我找不到任何權利。 – 2011-12-20 08:29:15

+0

如果您點擊「編輯xxx小時前」的時間鏈接,您可以查看修訂歷史記錄(帶註釋)。您會注意到我在第一個代碼示例中修復了代碼格式。 – PatrickSteele 2011-12-20 13:05:25

回答

0

它已經,因爲我用的記錄/重放語義對比的AAA很長一段時間(排列/法/斷言)語法,但試穿只是身份模擬做SetupResult

mocks.BackToRecord(identity); 
SetupResult.For(identity.IsAuthenticated).Return(true).Repeat.Any(); 
mocks.Replay(identity); 

NEW回答

擺脫.Repeat.Any()。我認爲,因爲這是一個屬性,你只需要設置返回值。 Rhino.Mocks將始終返回該值 - 您無需告訴它重複。我做了一個快速測試,得到了同樣的錯誤,但是一旦我刪除.Repeat.Any(),它就起作用了。

+0

帕特里克感謝您的幫助。我更新了我的代碼以反映您的建議。它沒有區別,但代碼仍然拋出異常 – 2011-12-21 08:25:34

+0

@KSig - 請參閱我的新答案。 – PatrickSteele 2011-12-21 14:47:00

+0

謝謝,現貨! :-) – 2011-12-23 12:00:59