J'utilise moq pour se moquer d'un emballage j'ai créé pour HttpClient
classe:Une bonne façon de se moquer HttpClient et envoyer/recevoir des cookies
public interface IHttpClientWrapper
{
Task<HttpResponseMessage> PostAsync(Uri uri,
HttpContent content,
CookieContainer cookies = null);
}
et dans ma mise en œuvre de PostAsync
« normale », je délègue simplement l'appel à 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);
}
Ainsi, dans mon application, tout fonctionne bien et je reçois les cookies par le serveur (cookies.Count
n'est pas 0
)
Pour mon test, j'ai un Mock<IHttpClientWrapper>
, et j'ai mis en place sa méthode PostAsync
pour retourner un new HttpResponseMessage
. J'appelle aussi la méthode HttpResponseMessage.Headers.AddCookies
pour ajouter 2 cookies à cette réponse.
Mais quand je l'appelle mon objet moqué d'une manière comme ceci:
/* 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);
alors, cookies.Count
est toujours 0
. Donc, je me demandais ce qui est différent d'appeler le serveur réel? Ai-je besoin d'en-têtes supplémentaires? Comment puis-je définir les cookies ici?
Ce n'est pas un [mcve] qui peut être utilisé pour reproduire le problème. – Nkosi