我试图在我的MVC应用程序上运行一些测试,但我一直在经历一个让它工作的麻烦世界。我会尽量得到正确的一点是:如何嘲笑或伪造HttpApplication/HttpContext进行测试
我使用RhinoMocks尝试这样的事:
设置:
MockRepository mocks = new MockRepository();
HttpContextBase _mockContext = mocks.FakeHttpContext();
mocks.SetFakeControllerContext(new LoginController());
HttpApplicationStateBase appState = MockRepository.GenerateStub<HttpApplicationStateBase>();
_mockContext.Expect(mc => mc.Application).Return(appState);
HttpContext.Current = _mockContext.ApplicationInstance.Context;
这里的FakeHttpContext()
方法:
public static HttpContextBase FakeHttpContext(this MockRepository mocks)
{
HttpApplication app = mocks.PartialMock<HttpApplication>();
HttpContextBase context = mocks.PartialMock<HttpContextBase>();
HttpRequestBase request = mocks.PartialMock<HttpRequestBase>();
HttpResponseBase response = mocks.PartialMock<HttpResponseBase>();
HttpSessionStateBase session = mocks.PartialMock<HttpSessionStateBase>();
HttpServerUtilityBase server = mocks.PartialMock<HttpServerUtilityBase>();
SetupResult.For(context.ApplicationInstance).Return(app);
SetupResult.For(context.Request).Return(request);
SetupResult.For(context.Response).Return(response);
SetupResult.For(context.Session).Return(session);
SetupResult.For(context.Server).Return(server);
mocks.Replay(context);
return context;
}
我真的需要访问HttpContextBase.Request.AppRelativeCurrentExecutionFilePath
,但它总是以null
的形式返回。 HttpContext.Current.Request.RequestContext
也是如此。
有人可以帮我吗?可以肯定的是,我现在绝望了。
你不要告诉问题是什么?你有错误(哪一个?)?据我所见,特定的设置'安装程序(c => c.Request。AppRelativeCurrentExecutionFilePath)'应该可以工作,因为'Request'是一个'virtual'属性'AppRelativeCurrentExecutionFilePath'的'virtual'属性。你说'_mockContext.SetupAllProperties();'的原因是什么?您还希望设置其他*属性? –
@JeppeStigNielsen我更新了我现在使用的问题。我仍然无法工作。 – Kehlan