Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengejek Kaedah Sambungan dengan Moq Apabila Ia Tidak Menyokongnya Secara Langsung?

Bagaimanakah Saya Boleh Mengejek Kaedah Sambungan dengan Moq Apabila Ia Tidak Menyokongnya Secara Langsung?

DDD
DDDasal
2025-01-20 02:16:09257semak imbas

How Can I Mock Extension Methods with Moq When It Doesn't Directly Support Them?

Kaedah Sambungan Mengejek dalam Ujian Unit: Pendekatan Praktikal

Ujian unit selalunya memerlukan kaedah sambungan mengejek, tugas yang pada mulanya kelihatan bermasalah dengan Moq kerana kekurangan sokongan langsung. Ini berpunca daripada sifat kaedah sambungan: ia pada asasnya kaedah statik melanjutkan kelas sedia ada. Moq, bagaimanapun, mengejek kejadian objek, bukan kaedah statik.

Penyelesaian terletak pada pemahaman bahawa kaedah sambungan menambah kefungsian pada kelas. Oleh itu, daripada mengejek kaedah sambungan itu sendiri, kami mengejek kelas sasaran.

Mari kita periksa senario biasa:

<code class="language-csharp">public class SomeType {
    public int Id { get; set; }
}

// ... (Extension method definition elsewhere) ...</code>

Contoh yang disediakan menunjukkan keperluan untuk mengejek FirstOrDefault kaedah sambungan yang digunakan pada List<SomeType>. Daripada mengejek FirstOrDefault secara langsung, kami membuat olok-olok List<SomeType>:

<code class="language-csharp">var listMock = new Mock<List<SomeType>>();
listMock.Setup(l => l.FirstOrDefault(st => st.Id == 5))
        .Returns(new SomeType { Id = 5 });</code>

Persediaan ini membolehkan kami mentakrifkan nilai pulangan kaedah sambungan FirstOrDefault apabila dipanggil dengan predikat yang ditentukan. Kami mengawal tingkah laku secara tidak langsung, melalui olok-olok objek senarai.

Teknik ini secara berkesan memintas had Moq, membolehkan ujian unit komprehensif yang merangkumi senario yang melibatkan kaedah sambungan. Dengan memfokuskan pada mengejek objek yang dikendalikan oleh kaedah sambungan, kami mendapat kawalan ke atas kelakuannya dan mencapai liputan ujian yang mantap.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengejek Kaedah Sambungan dengan Moq Apabila Ia Tidak Menyokongnya Secara Langsung?. 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