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

Bagaimanakah Saya Boleh Mengejek Kaedah Sambungan dengan Moq dengan Berkesan?

Barbara Streisand
Lepaskan: 2025-01-20 02:01:12
asal
925 orang telah melayarinya

How Can I Effectively Mock Extension Methods with Moq?

Gunakan Moq untuk mengejek kaedah sambungan

Dalam dunia ujian unit, ejekan memainkan peranan penting dalam mengasingkan kebergantungan dan memastikan kestabilan ujian. Walau bagaimanapun, apabila berurusan dengan kaedah lanjutan, teknik simulasi tradisional nampaknya gagal.

Moq, rangka kerja mengejek yang popular, tidak secara langsung menyokong kaedah statik mengejek, yang merupakan asas kaedah sambungan. Ralat "Jangkaan tidak sah pada ahli yang tidak boleh diganti" dengan tepat meringkaskan pengehadan ini.

Pertimbangkan contoh berikut:

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

var ListMock = new Mock<List<SomeType>>();
ListMock.Setup(l => l.FirstOrDefault(st => st.Id == 5))
        .Returns(new SomeType { Id = 5 });</code>
Salin selepas log masuk

Ujian ini akan gagal kerana Moq tidak boleh mengatasi kaedah statik FirstOrDefault bagi kelas List.

Beberapa alternatif telah dicadangkan:

  • Jenis olok-olok: Olok-olok jenis yang mengandungi kaedah sambungan dan ubah hala panggilan ke pelaksanaan yang diejek.
  • Buat pembalut: Benamkan jenis sambungan ke dalam kelas pembalut boleh olok-olok, memisahkan pelaksanaan boleh olok-olok daripada kaedah sambungan.
  • Ganti panggilan: Gunakan alat seperti PostSharp atau ILMeaving untuk menggantikan kaedah sambungan dengan pelaksanaan yang boleh diejek pada masa jalan.

Walau bagaimanapun, kaedah ini memperkenalkan kerumitan tambahan dan mungkin tidak praktikal dalam sesetengah kes. Oleh itu, pastikan anda mempertimbangkan kesesuaian kaedah sambungan olok-olok dalam strategi ujian anda.

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