首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Moq: HttpContextBase.ApplicationInstance调用失败,模拟行为严格

Moq: HttpContextBase.ApplicationInstance调用失败,模拟行为严格
EN

Stack Overflow用户
提问于 2015-09-04 15:31:52
回答 1查看 1.1K关注 0票数 0

我正在尝试模拟一个API控制器方法的HttpContextWrapper,该方法应该返回UserHostAddress。我对执行没有控制权。我应该只对我所得到的代码进行单元测试。

我已经在StackOverflow上学习了一些例子,虽然我已经接近于实现我所需要的,但我无法克服这个例外:

Moq.MockException :严格的模拟行为导致HttpContextBase.ApplicationInstance调用失败。模拟上的所有调用都必须有相应的设置。

以下是我的单元测试方法:

代码语言:javascript
复制
    private static HttpRequestMessage CreateRequest(string url, string mthv, HttpMethod method)
    {
        var request = new HttpRequestMessage();

        var baseRequest = new Mock<HttpRequestBase>(MockBehavior.Strict);
        var baseContext = new Mock<HttpContextBase>(MockBehavior.Strict);

        baseRequest.Setup(br => br.UserHostAddress).Returns("127.0.0.1");
        baseContext.Setup(bc => bc.Request).Returns(baseRequest.Object);

        var baseContextWrapper = new Mock<HttpContextWrapper>(baseContext.Object.ApplicationInstance.Context);

        request.RequestUri = new Uri(url);
        request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(mthv));
        request.Properties.Add("MS_HttpContext", baseContextWrapper.Object);
        request.Method = method;

        return request;
    }

    [Test]
    public void IsClientIpAddressReturned()
    {
        // Assign
        var request = CreateRequest("http://myserver/api/CustomerController", "application/json", HttpMethod.Get);

        var apiCachedController = new ApiCachedController();

        // Act
        RequestManager.RegisterRequestWithThread();

        var address = apiCachedController.GetClientIpAddress(request);

        // Assert
        Assert.AreEqual(address, "127.0.0.1");
    }
EN

回答 1

Stack Overflow用户

发布于 2015-09-04 18:58:34

CreateRequest方法中,您要在baseContext模拟中引用ApplicationInstance.Context。但是,在此属性上没有设置:

var baseContextWrapper = new Mock(baseContext.Object.ApplicationInstance.Context);

在模拟baseContext上设置上下文

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

https://stackoverflow.com/questions/32401701

复制
相关文章

相似问题

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