Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk mengejek HttpClient untuk Ujian Unit Berkesan?

Bagaimana untuk mengejek HttpClient untuk Ujian Unit Berkesan?

Susan Sarandon
Lepaskan: 2025-01-13 13:46:43
asal
378 orang telah melayarinya

How to Mock HttpClient for Effective Unit Testing?

Ejek HttpClient dalam ujian unit

Dalam ujian unit, adalah amalan biasa untuk mengejek kebergantungan luar untuk mengasingkan gelagat kod sasaran. Mock HttpClient membenarkan kod ujian yang bergantung pada permintaan HTTP tanpa membuat panggilan rangkaian sebenar.

Pertimbangkan senario berikut:

<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>
Salin selepas log masuk

Dalam projek ujian unit, anda mungkin ingin mengejek HttpClient untuk mengelakkan membuat panggilan rangkaian dan menumpukan pada menguji logik kelas Sambungan.

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

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

Untuk melakukan ini, anda boleh menggunakan suntikan kebergantungan untuk menyuntik HttpClient olok-olok. Kebolehlanjutan HttpClient terletak pada HttpMessageHandler yang diserahkan kepada pembina. Anda boleh mencipta HttpMessageHandler olok-olok dalam ujian unit anda dan menyerahkannya kepada pembina 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>
Salin selepas log masuk

Dengan menggunakan suntikan pergantungan dan mengejek HttpMessageHandler, anda boleh mengasingkan kod yang sedang diuji dengan berkesan dan mengesahkan kelakuannya tanpa membuat panggilan rangkaian sebenar.

Atas ialah kandungan terperinci Bagaimana untuk mengejek HttpClient untuk Ujian Unit Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan