【问题标题】:Moq: HttpContextBase.ApplicationInstance invocation failed with mock behavior StrictMoQ:HttpContextBase.ApplicationInstance调用失败,Mock Traffic严格
【发布时间】:2015-11-30 19:51:23
【问题描述】:

我正在尝试为应该返回 UserHostAddress 的 API 控制器方法模拟 HttpContextWrapper。我无法控制实施。我只应该对给定的代码进行单元测试。

我已经在 StackOverflow 上遵循了一些示例,虽然我已经接近实现我的需要,但我无法摆脱这个异常:

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

这是我的单元测试方法:

    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");
    }

【问题讨论】:

    标签: asp.net-mvc unit-testing moq httpcontext


    【解决方案1】:

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

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

    在你的 Mock baseContext 上设置上下文

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2018-10-14
      • 2017-12-19
      • 1970-01-01
      相关资源
      最近更新 更多