首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >犀牛模拟财产

犀牛模拟财产
EN

Stack Overflow用户
提问于 2016-02-23 08:39:25
回答 1查看 375关注 0票数 0

当我在后面执行这两行时,我的代码会在第二行的Previous method 'HttpContextBase.get_Request();' requires a return value or an exception to throw.中失败。

代码语言:javascript
复制
context.Expect(c => c.Request.UrlReferrer).Return(uri).Repeat.Any();
context.Expect(c => c.Request.HttpMethod).Return("POST").Repeat.Any();

但是,当我只执行其中一行时,代码运行良好。

执行以下操作并不能解决问题。

代码语言:javascript
复制
context.Expect(c => c.Request).Return(request);

有人知道这种奇怪的行为吗?

谢谢,

德鲁滕

编辑:整个代码是:

代码语言:javascript
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-23 08:54:38

我解决了问题。这个问题可能与

代码语言:javascript
复制
context.Expect(c => c.Request.UrlReferrer).Return(uri).Repeat.Any();  

代码语言:javascript
复制
context.Expect(c => c.Request).Return(request).Repeat.Any();

工作守则是:

代码语言:javascript
复制
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();

我觉得奇怪的是

代码语言:javascript
复制
context.Expect(c => c.Request.HttpMethod).Return("POST").Repeat.Any();

一旦工作,即使没有设置返回的请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35572596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档