当我在后面执行这两行时,我的代码会在第二行的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);有人知道这种奇怪的行为吗?
谢谢,
德鲁滕
编辑:整个代码是:
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);
}
}发布于 2016-02-23 08:54:38
我解决了问题。这个问题可能与
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();一旦工作,即使没有设置返回的请求。
https://stackoverflow.com/questions/35572596
复制相似问题