This overload method is not virtual, so it cannot be overridden by Moq.
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request);
That's why he throws NotSupportedException
The virtual method you are looking for is a method
public virtual Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken);
HttpClient , .
, .
.
public class DelegatingHandlerStub : DelegatingHandler {
private readonly Func<HttpRequestMessage, CancellationToken, Task<HttpResponseMessage>> _handlerFunc;
public DelegatingHandlerStub() {
_handlerFunc = (request, cancellationToken) => Task.FromResult(request.CreateResponse(HttpStatusCode.OK));
}
public DelegatingHandlerStub(Func<HttpRequestMessage, CancellationToken, Task<HttpResponseMessage>> handlerFunc) {
_handlerFunc = handlerFunc;
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
return _handlerFunc(request, cancellationToken);
}
}
, , . .
, -
public async Task _SendRequestAsync_Test() {
var handlerStub = new DelegatingHandlerStub();
var client = new HttpClient(handlerStub);
var sut = new ClassA(client);
var obj = new SomeObject() {
};
var response = await sut.SendRequest(obj);
Assert.IsNotNull(response);
Assert.IsTrue(response.IsSuccessStatusCode);
}