2013-03-07 36 views
0

短版:如何模擬使用Rhino Mocks對HttpContext.Cache [「MyKey」]的調用?

如何獲得犀牛製品的呼叫模擬到HttpContext.Cache["MyKey"]並返回預期的數據?

龍版本:

我需要模擬從HttpContext.Cache與犀牛嘲笑返回值。我用我的(Visual Studio中)單元測試

// All these are fields on my Unit test class. 
foo = new Foo(); 
mock = new MockRepository(); 
context = mocks.DynamickMock<HttpContextBase>(); 
var cache = context.Stub(x => x.Cache).Return(HttpRuntime.Cache); 

到目前爲止好的TestInitialize方法下面的代碼。現在,我想這兩個如下:

cache.Stub(x => x["MyKey"]).Return(foo); 

context.Stub(x => x.Cache["MyKey"]).Return(foo); 

第一個甚至不會編譯。視覺工作室告訴我,我不能「應用索引與[]到類型'Rhino.Mocks.Interfaces.IMethodOptions'」的表達式。

第二個編譯但我得到一個NullReferenceException。我想這是因爲我沒有打電話給mock.ReplayAll();。當我在測試中移動這條線(在mock.ReplayAll()之前或之後)時,我仍然得到NullReferenceException。異常沒有任何內部異常。然而,當我懸停的x.CacheCache,我得到爲x.Cache值以下錯誤信息:「‘x.Cache’扔System.InvalidOperationException類型的異常」而說異常的消息是「* Previous方法'HttpContextBase.get_Cache();'需要返回值或拋出異常。*「。

嗯,我想我明白爲什麼會發生這種情況,只要mock.ReplayAll()還沒有被調用,但我不知道爲什麼會發生。

所以總而言之,我該如何得到這個工作?如何讓Rhino Mocks模擬撥打HttpContext.Cache["MyKey"]並返回預期數據?

回答

0

好的,實際上沒有必要存根。調用mocks.ReplayAll()後,我只需要插入任何我想要到緩存中使用

_context.Cache.Insert("MyKey", foo); 

唯一的缺點是,似乎沒有辦法在測試的初始化方法來使用它。

相關問題