簡體   English   中英

如何為 FakeItEasy 構建 HttpResponseHeaders

[英]How to build an HttpResponseHeaders for the FakeItEasy

我正在使用 C#,我需要測試接受 System.Net.Http.Headers.HttpRequestHeaders 作為參數的方法之一。 我們正在使用 FakeItEasy 進行測試。

但似乎 HttpResponseHeaders - 沒有構造函數(並且它是密封的),它使用 HttpHeader 作為基礎。 HttpHeader - 具有構造函數,但 Header 屬性僅允許獲取。

有沒有辦法構建虛擬/假 HttpResponseHeaders 或 HttpResponseMessage 並在其中預設所需的 Header 值?

FakeItEasy 不能偽造一個密封的 class也不能創建一個沒有可訪問構造函數的 Dummy ,但你可以試試這個:

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

僅僅因為Headers是 get-only 並不意味着您不能改變列表。

我使用反射創建了一個HttpResponseHeaders object:

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

使用@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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM