.net 如何使用Rhino Mock模拟对HttpContext.Cache[“MyKey”的调用?

.net 如何使用Rhino Mock模拟对HttpContext.Cache[“MyKey”的调用?,.net,unit-testing,rhino-mocks,httpcontext,http-caching,.net,Unit Testing,Rhino Mocks,Httpcontext,Http Caching,短版: 如何让Rhino Mock模拟对HttpContext.Cache[“MyKey”]的调用并返回预期数据 长版本: 我需要使用Rhino Mock模拟来自HttpContext.Cache的返回值。我在(Visual Studio)单元测试的TestInitialize方法中使用了以下代码 // All these are fields on my Unit test class. foo = new Foo(); mock = new MockRepository(); context

短版:

如何让Rhino Mock模拟对HttpContext.Cache[“MyKey”]的调用并返回预期数据

长版本:

我需要使用Rhino Mock模拟来自
HttpContext.Cache
的返回值。我在(Visual Studio)单元测试的
TestInitialize
方法中使用了以下代码

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

第一个甚至不会编译。VisualStudio告诉我不能“将带[]的索引应用于'Rhino.Mocks.Interfaces.IMethodOptions'类型的表达式”

第二个可以编译,但我得到了一个
NullReferenceException
。我想这是因为我还没有调用
mock.ReplayAll()。当我在测试中移动这一行时(在
mock.ReplayAll()
之前或之后),我仍然会得到一个
NullReferenceException
。该异常没有任何内部异常。但是,当我将鼠标悬停在
x.Cache
Cache
上时,我得到以下错误消息作为
x.Cache
的值:“'x.Cache'抛出了一个类型为
System.invalidoOperationException
”的异常,并且所述异常的消息是“*以前的方法'HttpContextBase.get\u Cache();'需要返回值或异常才能抛出。*”

好吧,我想我理解为什么只要没有调用
mock.ReplayAll()
,就会发生这种情况,但我不知道为什么会在之后发生


总而言之,我怎样才能让它工作呢?如何让Rhino Mock模拟对HttpContext.Cache[“MyKey”]
的调用并返回预期数据?

好的,实际上不需要存根它。调用
mocks.ReplayAll()之后,我只需要使用

_context.Cache.Insert("MyKey", foo);
唯一的缺点是,似乎没有办法在测试的初始化方法中使用它

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