如何为 FakeItEasy 构建 HttpResponseHeaders
How to build an HttpResponseHeaders for the FakeItEasy
我正在使用 C#,我需要测试接受 System.Net.Http.Headers.HttpRequestHeaders 作为参数的方法之一。我们正在使用 FakeItEasy 进行测试。
但 HttpResponseHeaders 似乎没有构造函数(而且它是密封的),它使用 HttpHeader 作为基础。 HttpHeader - 有构造函数但 Header 属性 只允许获取。
有没有办法建立 dummy/fake HttpResponseHeaders 或 HttpResponseMessage 并在其中预设所需的 Header 值?
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 并不意味着您不能改变列表。
我使用反射创建了一个 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);
}
使用 提供的解决方案对我的 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);
我正在使用 C#,我需要测试接受 System.Net.Http.Headers.HttpRequestHeaders 作为参数的方法之一。我们正在使用 FakeItEasy 进行测试。
但 HttpResponseHeaders 似乎没有构造函数(而且它是密封的),它使用 HttpHeader 作为基础。 HttpHeader - 有构造函数但 Header 属性 只允许获取。
有没有办法建立 dummy/fake HttpResponseHeaders 或 HttpResponseMessage 并在其中预设所需的 Header 值?
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 并不意味着您不能改变列表。
我使用反射创建了一个 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);
}
使用
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);