犀牛嘲笑物业财产

时间:2016-02-23 08:39:25

标签: c# asp.net-mvc rhino-mocks

当我在彼此之后执行这两行时,我的代码在第二行上以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);
    }
}

1 个答案:

答案 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上设置回报。