[Raw article]
HttpClient accepts a HttpMessageHandler as a constructor parameter. We need a mock mock HttpMessageHandler
public class FakeHttpMessageHandler : HttpMessageHandler
{
private readonly string _response;
public FakeHttpMessageHandler(HttpStatusCode statusCode)
{
_response = "";
StatusCode = statusCode;
}
public FakeHttpMessageHandler(string response)
{
_response = response;
StatusCode = HttpStatusCode.OK;
}
public FakeHttpMessageHandler(string response, HttpStatusCode statusCode)
{
_response = response;
StatusCode = statusCode;
}
public HttpStatusCode StatusCode { get; set; }
public HttpRequestMessage Request { get; set; }
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{
Request = request;
var response = new HttpResponseMessage(StatusCode) {Content = new StringContent(_response)};
return Task.FromResult(response);
}
}
Autofac helps us to inject the HttpClient to the client
public Gateway(Func<Owned<HttpClient> createHttpClient)
{
}
Registration in Autofac module
builder.RegisterType<HttpClient>();
Test class
_testGateway = new Gateway(() => new Owned<HttpClient>(new HttpClient(_fakeHttpMessageHandler), fakeLifeTime));
...