【发布时间】:2014-01-01 18:37:42
【问题描述】:
我正在尝试在我的 MVC 应用程序上运行一些测试,但我遇到了一个无法让它工作的世界。我会尽量直入主题:
我正在使用 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 也是如此。
有人可以帮我吗?可以肯定地说我现在很绝望。
【问题讨论】:
-
你不知道是什么问题吗?你得到一个错误(哪一个?)?据我所见,特定设置
Setup(c => c.Request.AppRelativeCurrentExecutionFilePath)应该可以工作,因为Request是一个virtual属性,它本身具有virtual属性AppRelativeCurrentExecutionFilePath。你说_mockContext.SetupAllProperties();的原因是什么?您是否也希望设置其他属性? -
@JeppeStigNielsen 我用我现在使用的东西更新了我的问题。我仍然无法让它工作。
标签: c# asp.net-mvc-4 integration-testing moq httpcontext