Maison > développement back-end > C++ > Comment se moquer de HttpClient pour des tests unitaires efficaces ?

Comment se moquer de HttpClient pour des tests unitaires efficaces ?

Susan Sarandon
Libérer: 2025-01-13 13:46:43
original
368 Les gens l'ont consulté

How to Mock HttpClient for Effective Unit Testing?

Mock HttpClient dans les tests unitaires

Dans les tests unitaires, il est courant de simuler les dépendances externes pour isoler le comportement du code cible. Mock HttpClient permet de tester du code qui repose sur des requêtes HTTP sans effectuer d'appels réseau réels.

Considérez le scénario suivant :

<code class="language-csharp">public interface IHttpHandler
{
    HttpClient Client { get; }
}

public class HttpHandler : IHttpHandler
{
    public HttpClient Client => new HttpClient();
}

public class Connection
{
    private readonly IHttpHandler _httpClient;

    public Connection(IHttpHandler httpClient)
    {
        _httpClient = httpClient;
    }

    public void DoSomething() { /* 使用 _httpClient.Client 进行 HTTP 调用 */ }
}</code>
Copier après la connexion

Dans un projet de test unitaire, vous souhaiterez peut-être vous moquer du HttpClient pour éviter de passer des appels réseau et vous concentrer sur le test de la logique de la classe Connection.

<code class="language-csharp">private IHttpHandler _httpClient;

[TestMethod]
public void TestMockConnection()
{
    //此处需要创建 HttpClient 的模拟实例,而不是真实的实例
    var connection = new Connection(_httpClient);
    connection.DoSomething();
}</code>
Copier après la connexion

Pour ce faire, vous pouvez utiliser l'injection de dépendances pour injecter un HttpClient fictif. L'extensibilité de HttpClient réside dans le HttpMessageHandler passé au constructeur. Vous pouvez créer un HttpMessageHandler simulé dans votre test unitaire et le transmettre au constructeur HttpClient.

<code class="language-csharp">[TestMethod]
public void TestMockConnection()
{
    var mockHttp = new MockHttpMessageHandler(); // 创建一个模拟 HttpMessageHandler

    var httpClient = new HttpClient(mockHttp); // 将模拟 HttpMessageHandler 传递给 HttpClient 构造函数

    var connection = new Connection(new HttpHandler { Client = httpClient }); // 将模拟 HttpClient 注入 Connection 类

    connection.DoSomething();

    // 通过对模拟 HttpMessageHandler 设置期望来验证是否进行了预期的 HTTP 请求。
}</code>
Copier après la connexion

En utilisant l'injection de dépendances et en vous moquant du HttpMessageHandler, vous pouvez isoler efficacement le code testé et vérifier son comportement sans effectuer d'appels réseau réels.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal