Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengejek Kaedah Sambungan dengan Berkesan dengan Moq?

Bagaimanakah Saya Boleh Mengejek Kaedah Sambungan dengan Berkesan dengan Moq?

Barbara Streisand
Barbara Streisandasal
2025-01-20 02:07:14862semak imbas

How Can I Mock Extension Methods Effectively with Moq?

Kaedah sambungan mengejek menggunakan Moq: alternatif

Apabila menguji kod yang bergantung pada kaedah sambungan, adalah penting untuk mengekalkan kestabilan ujian terhadap kemungkinan kegagalan masa depan kaedah ini. Walaupun kefungsian Moq tidak meluas secara langsung kepada kaedah statik mengatasi, penyelesaian wujud.

Kaedah alternatif

Kaedah sambungan adalah kaedah statik dan tidak boleh disimulasikan secara langsung oleh Moq. Sebaliknya, anda boleh mengasingkan pelaksanaan kaedah lanjutan dengan memanfaatkan kelas konkrit dan kaedah statiknya.

Pertimbangkan contoh berikut:

<code class="language-c#">public static class ExtensionClass
{
    public static int GetValue(this SomeType obj) => obj.Id;
}

public class SomeType
{
    public int Id { get; set; }
}</code>

Pelaksanaan ujian

Untuk membuat olok-olok yang tidak memanggil kaedah sambungan, rujuk kelas statik secara langsung:

<code class="language-c#">var concreteClassMock = new Mock<ExtensionClass>();
concreteClassMock.Setup(c => c.GetValue(It.IsAny<SomeType>())).Returns(5);</code>

Dengan menyasarkan kaedah statik kelas konkrit, anda boleh mensimulasikan gelagat kaedah sambungan dengan berkesan tanpa bergantung secara langsung pada kaedah sambungan itu sendiri. Ini memastikan bahawa kegagalan ujian timbul hanya daripada kelas yang diuji dan bukan daripada kemungkinan kegagalan masa depan kaedah sambungan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengejek Kaedah Sambungan dengan Berkesan dengan Moq?. 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