Skip to content

Instantly share code, notes, and snippets.

@PatrickDinh
Last active November 9, 2015 12:34
Show Gist options
  • Save PatrickDinh/0ed548e0ef722060939d to your computer and use it in GitHub Desktop.
Save PatrickDinh/0ed548e0ef722060939d to your computer and use it in GitHub Desktop.

[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));
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment