ich moq bin mit einem Wrapper ich für HttpClient
Klasse erstellt verspotten:Richtiger Weg Httpclient zu verspotten und senden/erhalten Cookies
public interface IHttpClientWrapper
{
Task<HttpResponseMessage> PostAsync(Uri uri,
HttpContent content,
CookieContainer cookies = null);
}
und in meiner „normalen“ Implementierung von PostAsync
, ich delegieren nur um den Anruf HttpClient
public Task<HttpResponseMessage> PostAsync(Uri uri, HttpContent content, CookieContainer cookies = null)
{
var client = cookies == null ? new HttpClient()
: new HttpClient(new HttpClientHandler { CookieContainer = cookies });
return client.PostAsync(uri, content);
}
Also, in meiner Anwendung, funktioniert alles einwandfrei und ich bekomme den vom Server Cookies (cookies.Count
ist nicht 0
)
Für meinen Test habe ich eine Mock<IHttpClientWrapper>
, und ich habe seine PostAsync
Methode eingerichtet, um eine new HttpResponseMessage
zurückzugeben. Ich rufe auch HttpResponseMessage.Headers.AddCookies
Methode, um 2 Cookies zu dieser Antwort hinzuzufügen.
Aber wenn ich meine verspottet Objekt in einer Weise, wie dies nennen:
/* I setup url and content */
var mock = new Mock<IHttpClientHelper>();
mock.Setup(/* setup PostAsync to return the response I create */)...
var cookies = new CookieContainer();
var response = await mock.PostAsync(url, content, cookies);
dann ist cookies.Count
immer 0
.
Also habe ich mich gefragt, was ist anders als den tatsächlichen Server aufrufen? Muss ich zusätzliche Header haben? Wie kann ich die Cookies hier einstellen?
Dies ist kein [mcve], mit dem das Problem reproduziert werden kann. – Nkosi