Skip to content

Instantly share code, notes, and snippets.

@vella-nicholas
Forked from GeorgDangl/MockHttpClient.cs
Created April 15, 2019 10:05
Show Gist options
  • Save vella-nicholas/636420552dea19a44f5a8cede1cd4eaf to your computer and use it in GitHub Desktop.
Save vella-nicholas/636420552dea19a44f5a8cede1cd4eaf to your computer and use it in GitHub Desktop.
Mock an Asp.Net Core HttpClient with a custom HttpMessageHandler using Moq
using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Moq;
using Moq.Protected;
namespace Tests
{
public class MockHttpClient
{
public HttpClient GetMockClient()
{
var mockHttpMessageHandler = new Mock<HttpMessageHandler>();
mockHttpMessageHandler.Protected()
.Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
.Returns((HttpRequestMessage request, CancellationToken cancellationToken) => GetMockResponse(request, cancellationToken));
return new HttpClient(mockHttpMessageHandler.Object);
}
private Task<HttpResponseMessage> GetMockResponse(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.RequestUri.LocalPath == "/expectedPath")
{
var response = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
response.Content = new StringContent(GetAuthJson(), Encoding.UTF8, "application/json");
return Task.FromResult(response);
}
throw new NotImplementedException();
}
private string GetAuthJson()
{
return "{ \"isAuthenticated\": true }";
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment