我是 Mocking 框架的新手,并开始使用 RhinoMocks 来协助我的 MVC 应用程序单元测试。
我在用着Scott Hanselmanns MVC 模拟助手协助模拟 HttpContext。
我已经成功地(一段时间后)模拟了一些我需要的东西,但在涉及 HttpContext 的 Application 属性时却遇到了困难。
在我的应用程序中,我在应用程序中存储一个对象并在控制器中检索它,如下所示:
SomeObj foo = (SomeObj)Application["fooKey"];
这是在我的 MVC 应用程序中的 Application_Start 上创建的。
更新了以下第一个答案(为了清晰起见,附加代码)
目前在测试设置中我这样做:
HttpContextBase mockHttpBase = mocks.FakeHttpContext();
controllerToTest = new SomeController();
mocks.SetFakeControllerContext(controllerToTest);
HttpApplicationStateBase appState =
MockRepository.GenerateStub<HttpApplicationStateBase>();
Globals tmpAppGlobals =
new Globals();
mockHttpBase.Expect(ctx => ctx.Application).Return(appState);
mockHttpBase.Expect(ctx => ctx.Application[Globals.GlobalsKey]).
Return(tmpAppGlobals);
在我的单元测试设置中,我这样做:
Globals tmpAppGlobals = new Globals();
controllerToTest.ControllerContext.HttpContext.
Expect(ctx => ctx.Application[Globals.GlobalsKey]).
Return(tmpAppGlobals);
对于 Application 对象,此调用引发 NullReference 异常。
我的问题有两个:
1)从设计/架构的角度来看,这是正确的方法还是我做错了什么?
2)为什么这不起作用?
提前致谢。