Skip to content

Instantly share code, notes, and snippets.

@lski
Created April 18, 2019 11:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lski/052a7b967042eda9c99a426b62a9f270 to your computer and use it in GitHub Desktop.
Save lski/052a7b967042eda9c99a426b62a9f270 to your computer and use it in GitHub Desktop.
A wrapper for HttpClient to allow for mocking... however do not use, see readme

HttpWrapper

This is an idea to 'wrap' the HttpClient object to enable it to be mocked. However since starting to write this I found that using a HttpMessageHandler and passing it directly into a 'newed' HttpClient object allows for mocking of the HttpClient calls.

You can still use a HttpClient directly in your code, passed in via a constructor, or built from the HttpClientFactory object.

In conclusion dont use this lol

using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace HttpWrapper
{
/// <summary>
/// A concrete implementation of IHttpClient, which can be used easily for mocking
/// </summary>
public class HttpClientWrapper : IHttpClient
{
private readonly HttpClient _client;
public HttpClientWrapper(HttpClient client)
{
_client = client;
}
public HttpClient Client => _client;
public void CancelPendingRequests() => _client.CancelPendingRequests();
public Task<HttpResponseMessage> DeleteAsync(string uri) => _client.DeleteAsync(uri);
public Task<HttpResponseMessage> DeleteAsync(string uri, CancellationToken cancel) => _client.DeleteAsync(uri, cancel);
public Task<HttpResponseMessage> DeleteAsync(Uri uri) => _client.DeleteAsync(uri);
public Task<HttpResponseMessage> DeleteAsync(Uri uri, CancellationToken cancel) => _client.DeleteAsync(uri, cancel);
public Task<HttpResponseMessage> GetAsync(string uri) => _client.GetAsync(uri);
public Task<HttpResponseMessage> GetAsync(string uri, HttpCompletionOption options) => _client.GetAsync(uri, options);
public Task<HttpResponseMessage> GetAsync(string uri, CancellationToken cancel) => _client.GetAsync(uri, cancel);
public Task<HttpResponseMessage> GetAsync(string uri, HttpCompletionOption options, CancellationToken cancel) => _client.GetAsync(uri, options, cancel);
public Task<HttpResponseMessage> GetAsync(Uri uri) => _client.GetAsync(uri);
public Task<HttpResponseMessage> GetAsync(Uri uri, HttpCompletionOption options) => _client.GetAsync(uri, options);
public Task<HttpResponseMessage> GetAsync(Uri uri, CancellationToken cancel) => _client.GetAsync(uri, cancel);
public Task<HttpResponseMessage> GetAsync(Uri uri, HttpCompletionOption options, CancellationToken cancel) => _client.GetAsync(uri, options, cancel);
public Task<HttpResponseMessage> PostAsync(string uri, HttpContent content) => _client.PostAsync(uri, content);
public Task<HttpResponseMessage> PostAsync(string uri, HttpContent content, CancellationToken cancel) => _client.PostAsync(uri, content, cancel);
public Task<HttpResponseMessage> PostAsync(Uri uri, HttpContent content) => _client.PostAsync(uri, content);
public Task<HttpResponseMessage> PostAsync(Uri uri, HttpContent content, CancellationToken cancel) => _client.PostAsync(uri, content, cancel);
public Task<HttpResponseMessage> PutAsync(string uri, HttpContent content) => _client.PutAsync(uri, content);
public Task<HttpResponseMessage> PutAsync(string uri, HttpContent content, CancellationToken cancel) => _client.PutAsync(uri, content, cancel);
public Task<HttpResponseMessage> PutAsync(Uri uri, HttpContent content) => _client.PutAsync(uri, content);
public Task<HttpResponseMessage> PutAsync(Uri uri, HttpContent content, CancellationToken cancel) => _client.PutAsync(uri, content, cancel);
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request) => _client.SendAsync(request);
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpCompletionOption options) => _client.SendAsync(request, options);
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancel) => _client.SendAsync(request, cancel);
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpCompletionOption options, CancellationToken cancel) => _client.SendAsync(request, options, cancel);
}
}
using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace HttpWrapper
{
public interface IHttpClient
{
HttpClient Client { get; }
Task<HttpResponseMessage> GetAsync(string uri);
Task<HttpResponseMessage> GetAsync(string uri, HttpCompletionOption options);
Task<HttpResponseMessage> GetAsync(string uri, CancellationToken cancel);
Task<HttpResponseMessage> GetAsync(string uri, HttpCompletionOption options, CancellationToken cancel);
Task<HttpResponseMessage> GetAsync(Uri uri);
Task<HttpResponseMessage> GetAsync(Uri uri, HttpCompletionOption options);
Task<HttpResponseMessage> GetAsync(Uri uri, CancellationToken cancel);
Task<HttpResponseMessage> GetAsync(Uri uri, HttpCompletionOption options, CancellationToken cancel);
Task<HttpResponseMessage> DeleteAsync(string uri);
Task<HttpResponseMessage> DeleteAsync(string uri, CancellationToken cancel);
Task<HttpResponseMessage> DeleteAsync(Uri uri);
Task<HttpResponseMessage> DeleteAsync(Uri uri, CancellationToken cancel);
Task<HttpResponseMessage> PostAsync(string uri, HttpContent content);
Task<HttpResponseMessage> PostAsync(string uri, HttpContent content, CancellationToken cancel);
Task<HttpResponseMessage> PostAsync(Uri uri, HttpContent content);
Task<HttpResponseMessage> PostAsync(Uri uri, HttpContent content, CancellationToken cancel);
Task<HttpResponseMessage> PutAsync(string uri, HttpContent content);
Task<HttpResponseMessage> PutAsync(string uri, HttpContent content, CancellationToken cancel);
Task<HttpResponseMessage> PutAsync(Uri uri, HttpContent content);
Task<HttpResponseMessage> PutAsync(Uri uri, HttpContent content, CancellationToken cancel);
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request);
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpCompletionOption options);
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancel);
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpCompletionOption options, CancellationToken cancel);
void CancelPendingRequests();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment