.net 如何为FakeItEasy构建HttpResponseHeaders

k4emjkb1  于 2023-05-19  发布在  .NET
关注(0)|答案(4)|浏览(145)

我使用C#,我需要测试我的方法之一,接受System.NET.Http.Headers.HttpRequestHeaders作为参数。我们使用FakeItEasy进行测试。
但是看起来HttpResponseHeaders -没有constructotr(并且它是密封的),并且它使用HttpHeader作为基础。HttpHeader -有构造函数,但Header属性只允许get。
有没有一种方法可以构建虚拟/假HttpResponseHeaders或HttpResponseMessage,并在其中预设所需的Header值?

up9lanfz

up9lanfz1#

FakeItEasy不能伪造一个密封类,也不能从一个没有可访问构造函数的类中创建一个Dummy,但你可以尝试这样做:

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

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

lyfkaqu1

lyfkaqu12#

我使用反射创建了一个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);
    }
xqnpmsa8

xqnpmsa83#

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

2wnc66cl4#

在.Net中使用反射6/7/8

private static HttpResponseHeaders CreateHttpResponseHeaders()
    {
        var constructorInfoObject = typeof(HttpResponseHeaders)
            .GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new [] { typeof(bool) }, null);

        return (HttpResponseHeaders) constructorInfoObject!.Invoke(new object?[] { false });
    }

相关问题