Ujian unit yang berkesan memerlukan pengasingan komponen daripada kebergantungan luaran. Panduan ini menunjukkan cara mengejek HttpClient
untuk ujian unit yang mantap, memfokuskan pada suntikan pergantungan dan rangka kerja Moq.
Menggunakan Suntikan Ketergantungan dengan Antara Muka
Suntikan kebergantungan adalah penting untuk kebolehujian. Ia membolehkan anda menggantikan kebergantungan (seperti HttpClient
) semasa ujian dengan versi yang diejek atau ditikam.
Mari kita pertimbangkan antara muka IHttpHandler
:
<code class="language-csharp">public interface IHttpHandler { HttpClient Client { get; } }</code>
Dan pelaksanaan konkrit (HttpHandler
):
<code class="language-csharp">public class HttpHandler : IHttpHandler { public HttpClient Client => new HttpClient(); }</code>
Mencipta HttpClient Diejek
Untuk mengejek HttpClient
, buat kelas yang melaksanakan IHttpHandler
yang mengembalikan HttpClient
yang diejek. Menggunakan Moq:
<code class="language-csharp">public class MockedHttpHandler : IHttpHandler { private readonly Mock<HttpClient> _clientMock; public MockedHttpHandler() { _clientMock = new Mock<HttpClient>(); } public HttpClient Client => _clientMock.Object; }</code>
Ujian Unit dengan Pengendali Diejek
Dalam ujian unit anda, suntik MockedHttpHandler
bukannya HttpHandler
:
<code class="language-csharp">[TestMethod] public void TestMockConnection() { var mockHttp = new MockedHttpHandler(); var connection = new Connection(mockHttp); // Assuming 'Connection' class uses IHttpHandler // Configure expectations for the mocked HttpClient (e.g., _clientMock.Setup(...)) Assert.AreEqual("Test McGee", connection.DoSomething()); // Example assertion }</code>
Ringkasan
Dengan menggunakan suntikan kebergantungan dan rangka kerja mengejek seperti Moq, anda mengasingkan ujian unit dengan berkesan daripada kebergantungan luaran seperti HttpClient
, membolehkan ujian terfokus logik teras kod anda. Pendekatan ini menggalakkan ujian unit yang lebih bersih, lebih boleh diselenggara dan boleh dipercayai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengejek HttpClient untuk Ujian Unit Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!