短版:如何模拟使用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"]
并返回预期数据?