短版:如何模擬使用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.Cache
的Cache
,我得到爲x.Cache
值以下錯誤信息:「‘x.Cache’扔System.InvalidOperationException
類型的異常」而說異常的消息是「* Previous方法'HttpContextBase.get_Cache();'需要返回值或拋出異常。*「。
嗯,我想我明白爲什麼會發生這種情況,只要mock.ReplayAll()
還沒有被調用,但我不知道爲什麼會發生。
所以總而言之,我該如何得到這個工作?如何讓Rhino Mocks模擬撥打HttpContext.Cache["MyKey"]
並返回預期數據?