Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mengejek HttpClient dengan berkesan dalam Ujian Unit?

Bagaimanakah saya boleh mengejek HttpClient dengan berkesan dalam Ujian Unit?

Linda Hamilton
Linda Hamiltonasal
2025-01-13 14:03:43583semak imbas

How Can I Effectively Mock HttpClient in Unit Tests?

Ejek HttpClient dalam ujian unit

Latar belakang

Dalam ujian unit, selalunya wajar untuk mengejek kebergantungan luar untuk mengelakkan membuat panggilan sebenar. Ini amat penting untuk menguji kod yang berinteraksi dengan klien HTTP seperti HttpClient.

Soalan

Pertimbangkan struktur kod berikut:

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

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

Dalam kes ini, kelas HttpHandler bergantung pada tika HttpClient dalaman. Untuk membuat ujian olok-olok untuk Sambungan yang bergantung pada IHttpHandler, anda perlu mengejek pergantungan HttpClient.

Penyelesaian: Gunakan HttpMessageHandler

Kelanjutan HttpClient membolehkan suntikan kejadian HttpMessageHandler. Dengan mencipta HttpMessageHandler olok-olok, kami boleh mengawal tingkah laku kebergantungan HttpClient dengan berkesan.

Cara menggunakan Moq

Moq ialah rangka kerja mengejek popular yang menyokong HttpClient mengejek. Begini cara mensimulasikan menggunakan Moq:

  1. Mulakan HttpMessageHandler olok-olok.
  2. Gunakan kaedah When() untuk menetapkan respons yang dijangkakan kepada permintaan HTTP.
  3. Buat tiruan IHttpHandler dan suntikan HttpMessageHandler tiruan.
  4. Suntikan IHttpHandler olok-olok ke dalam kelas Sambungan.

Alternatif: MockHttp

Jika anda lebih suka pendekatan yang lebih bersih, anda boleh menggunakan perpustakaan yang dipanggil MockHttp untuk memudahkan HttpClient mengejek:

  1. Pasang pakej RichardSzalay.MockHttp NuGet.
  2. Buat contoh MockHttpMessageHandler.
  3. Gunakan kaedah When() untuk menentukan tingkah laku tindak balas.
  4. Suntikan MockHttpMessageHandler ke dalam contoh HttpClient.

Contoh kod menggunakan 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>

Dengan menggunakan ejekan HttpMessageHandler, anda boleh mengasingkan gelagat kebergantungan HttpClient dengan berkesan dalam ujian unit anda, memastikan ujian anda berjalan secara bebas daripada faktor luaran.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengejek HttpClient dengan berkesan dalam Ujian Unit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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