Maison >développement back-end >C++ >Comment puis-je me moquer efficacement de HttpClient dans les tests unitaires ?

Comment puis-je me moquer efficacement de HttpClient dans les tests unitaires ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-13 14:03:43583parcourir

How Can I Effectively Mock HttpClient in Unit Tests?

Mock HttpClient dans les tests unitaires

Contexte

Dans les tests unitaires, il est souvent souhaitable de se moquer des dépendances externes pour éviter de faire de véritables appels. Ceci est particulièrement important pour tester le code qui interagit avec les clients HTTP tels que HttpClient.

Question

Considérez la structure de code suivante :

<code>public interface IHttpHandler
{
    HttpClient Client { get; }
}

public class HttpHandler : IHttpHandler
{
    public HttpClient Client
    {
        get { return new HttpClient(); }
    }
}</code>

Dans ce cas, la classe HttpHandler s'appuie sur l'instance interne HttpClient. Pour créer des tests simulés pour les connexions qui dépendent de IHttpHandler, vous devez simuler la dépendance HttpClient.

Solution : utilisez HttpMessageHandler

L'extensibilité de HttpClient permet l'injection d'instances HttpMessageHandler. En créant un HttpMessageHandler fictif, nous pouvons contrôler efficacement le comportement des dépendances HttpClient.

Comment utiliser Moq

Moq est un framework de moquerie populaire qui prend en charge la moquerie de HttpClient. Voici comment simuler à l'aide de Moq :

  1. Initialisez un HttpMessageHandler simulé.
  2. Utilisez la méthode When() pour définir la réponse attendue à une requête HTTP.
  3. Créez un IHttpHandler simulé et injectez le HttpMessageHandler simulé.
  4. Injectez un IHttpHandler simulé dans la classe Connection.

Alternative : MockHttp

Si vous préférez une approche plus propre, vous pouvez utiliser une bibliothèque appelée MockHttp pour simplifier la moquerie de HttpClient :

  1. Installez le package RichardSzalay.MockHttp NuGet.
  2. Créez une instance MockHttpMessageHandler.
  3. Utilisez la méthode When() pour spécifier le comportement de réponse.
  4. Injectez MockHttpMessageHandler dans l’instance HttpClient.

Exemples de code utilisant MockHttp

<code>var mockHttp = new MockHttpMessageHandler();

mockHttp.When("http://localhost/api/user/*")
        .Respond("application/json", "{'name' : 'Test McGee'}");

var client = new HttpClient(mockHttp);

var response = await client.GetAsync("http://localhost/api/user/1234");

var json = await response.Content.ReadAsStringAsync();

Console.Write(json);  // {'name' : 'Test McGee'}</code>

En utilisant le mocking HttpMessageHandler, vous pouvez isoler efficacement le comportement des dépendances HttpClient dans vos tests unitaires, garantissant ainsi que vos tests s'exécutent indépendamment des facteurs externes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn