短縮版:
Rhino Mocksに呼び出しをシミュレートして、HttpContext.Cache["MyKey"]
期待されるデータを返すようにするにはどうすればよいですか?
ロングバージョン:
HttpContext.Cache
RhinoMocksを使用してからの戻り値をシミュレートする必要があります。TestInitialize
(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);
ここまでは順調ですね。今、私は次の2つを試しました。
cache.Stub(x => x["MyKey"]).Return(foo);
と
context.Stub(x => x.Cache["MyKey"]).Return(foo);
最初のものはコンパイルすらしません。Visual Studioによると、「 []を使用したインデックスを'Rhino.Mocks.Interfaces.IMethodOptions'型の式に適用することはできません」とのことです。
2つ目はコンパイルしますが、。を取得しNullReferenceException
ます。まだ電話をかけていなかったからだと思いますmock.ReplayAll();
。テスト内でこの行を移動しても(前または後mock.ReplayAll()
)、まだ。が表示されNullReferenceException
ます。例外には内部例外はありません。ただし、Cache
のにカーソルを合わせるx.Cache
と、次のエラーメッセージが次の値として表示されますx.Cache
。 " 'x.Cache'はタイプSystem.InvalidOperationException
"の例外をスローし、その例外のメッセージは "* Previous method'HttpContextBase.get_Cache() ; ' スローするには戻り値または例外が必要です。*"。
mock.ReplayAll()
さて、呼び出されていない限り、なぜそれが起こるのかは理解できたと思いますが、その後になぜ起こるのかはわかりません。
つまり、どうすればこれを機能させることができますか?Rhino Mocksに呼び出しをシミュレートして、HttpContext.Cache["MyKey"]
期待されるデータを返すようにするにはどうすればよいですか?