【问题标题】:How to build an HttpResponseHeaders for the FakeItEasy如何为 FakeItEasy 构建 HttpResponseHeaders
【发布时间】:2020-04-20 19:07:39
【问题描述】:

我正在使用 C#,我需要测试接受 System.Net.Http.Headers.HttpRequestHeaders 作为参数的方法之一。我们正在使用 FakeItEasy 进行测试。

但似乎 HttpResponseHeaders - 没有构造(并且它是密封的),它使用 HttpHeader 作为基础。 HttpHeader - 具有构造函数,但 Header 属性只允许获取。

有没有办法构建 dummy/fake HttpResponseHeaders 或 HttpResponseMessage 并在其中预设所需的 Header 值?

【问题讨论】:

    标签: c# .net unit-testing http-headers fakeiteasy


    【解决方案1】:

    FakeItEasy can't fake a sealed class, nor create a Dummy out of one that doesn't have an accessible constructor,但你可以试试这个:

    var message = new HttpResponseMessage();
    var headers = message.Headers;
    headers.Add("HeaderKey", "HeaderValue");
    

    仅仅因为 Headers 是 get-only 并不意味着您不能改变列表。

    【讨论】:

      【解决方案2】:

      我使用反射创建了一个HttpResponseHeaders 对象:

          static HttpResponseHeaders CreateHttpResponseHeaders()
          {
              var myType = typeof(HttpResponseHeaders);
              var types = Array.Empty<Type>();
              var constructorInfoObject =
                  myType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, types, null);
      
              return (HttpResponseHeaders) constructorInfoObject.Invoke(null);
          }
      

      【讨论】:

        【解决方案3】:

        使用@Blair 提供的解决方案对我的 Sendgrid 方法进行单元测试。

        var fakeResponse = new System.Net.Http.HttpResponseMessage();
        var fakeResponseHeader = fakeResponse.Headers;
        fakeResponseHeader.Add("X-Message-Id", "123xyz");
        var response = new SendGrid.Response(System.Net.HttpStatusCode.Accepted, null, fakeResponseHeader);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-09
          • 2012-06-02
          • 2012-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多