当我在彼此之后执行这两行时,我的代码在第二行上以Previous method 'HttpContextBase.get_Request();' requires a return value or an exception to throw.
失败。
context.Expect(c => c.Request.UrlReferrer).Return(uri).Repeat.Any();
context.Expect(c => c.Request.HttpMethod).Return("POST").Repeat.Any();
然而,当我只执行其中一行时,代码运行正常。
执行以下操作无法解决问题。
context.Expect(c => c.Request).Return(request);
任何人都明白这种奇怪的行为吗?
谢谢,
Drutten
编辑:整个代码是:
public static class Extensions
{
public static HttpContextBase FakeHttpContext()
{
var context = MockRepository.GenerateMock<HttpContextBase>();
var request = MockRepository.GenerateMock<HttpRequestBase>();
var response = MockRepository.GenerateMock<HttpResponseBase>();
var session = MockRepository.GenerateMock<HttpSessionStateBase>();
var server = MockRepository.GenerateMock<HttpServerUtilityBase>();
var writer = new StringWriter();
var form = new NameValueCollection();
request.Expect(r => r.Form).Return(form);
var uri = new Uri("http://localhost/IntegrationTests");
request.Expect(r => r.UrlReferrer).Return(uri).Repeat.Any();
var queryString = new NameValueCollection();
request.Expect(r => r.QueryString).Return(queryString);
context.Expect(c => c.Request).Return(request).Repeat.Any();
context.Expect(c => c.Request.UrlReferrer).Return(uri).Repeat.Any();
context.Expect(c => c.Request.HttpMethod).Return("POST").Repeat.Any();
context.Expect(c => c.Response).Return(response);
context.Expect(c => c.Session).Return(session);
context.Expect(c => c.Server).Return(server);
context.Expect(c => c.Items).Return(new Dictionary<object, object>());
response.Expect(c => c.Output).Return(writer);
return context;
}
public static void MockControllerContext(this Controller controller)
{
var httpContext = FakeHttpContext();
var routeData = new RouteData();
routeData.Values.Add("controller", "Home");
routeData.Values.Add("action", "Index");
controller.ControllerContext = new ControllerContext(new RequestContext(httpContext, routeData), controller);
}
}
答案 0 :(得分:0)
我解决了这个问题。问题可能与
的混合有关context.Expect(c => c.Request.UrlReferrer).Return(uri).Repeat.Any();
和
context.Expect(c => c.Request).Return(request).Repeat.Any();
工作代码是:
var uri = new Uri("http://localhost/IntegrationTests");
request.Expect(r => r.UrlReferrer).Return(uri).Repeat.Any();
var queryString = new NameValueCollection();
request.Expect(r => r.QueryString).Return(queryString);
request.Expect(c => c.HttpMethod).Return("POST").Repeat.Any();
context.Expect(c => c.Request).Return(request).Repeat.Any();
我觉得做起来很奇怪
context.Expect(c => c.Request.HttpMethod).Return("POST").Repeat.Any();
一旦工作,即使没有在Request上设置回报。