I have trouble mocking with Moq.
Normally having a HttpClient I would mock it by injecting the HttpClient in the base class like this:
public class MyClass
{
private readonly HttpClient httpClient;
public MyClass(HttpClient httpClient)
{
this.httpClient = httpClient;
}
}
But now I have different functions in my class MyClass that need a custom HttpClientHandler like this:
HttpClientHandler httpClientHandler = new HttpClientHandler();
...
using var client = new HttpClient(httpClientHandler);
If I'd simply inject a HttpClient in MyClassTest with var service = new MyClass(httpMock.Object);, then the httpClient would be overwritten.
What would be the right way to test my functions and not making a real HTTP-call?
IHttpClientFactoryand typed/namedHttpClientinjection.public MyClass(HttpClientHandler httpClientHandler = null)and then called it with a mock:var mockHttpMessageHandler = new Mock<HttpClientHandler>();. It does the job, I'm just not sure, how "clean" or "best practice" it is.