Rumah > pembangunan bahagian belakang > C++ > Bagaimana Mengejek Kaedah Sambungan Menggunakan Moq dengan Berkesan?

Bagaimana Mengejek Kaedah Sambungan Menggunakan Moq dengan Berkesan?

Barbara Streisand
Lepaskan: 2025-01-20 02:21:08
asal
670 orang telah melayarinya

How to Effectively Mock Extension Methods Using Moq?

Kaedah sambungan mengejek dengan Moq: Panduan lengkap

Kod ujian yang bergantung pada kaedah sambungan boleh menimbulkan cabaran unik, terutamanya jika anda ingin memastikan bahawa kegagalan masa depan kaedah sambungan ini tidak memberi kesan kepada ujian anda. Walaupun Moq tidak secara langsung menyokong kaedah statik yang mengatasi (seperti yang digunakan dalam kaedah sambungan), terdapat penyelesaian yang bijak untuk mencapai ejekan dalam situasi ini.

Tidak seperti kaedah contoh, kaedah statik tidak boleh ditindih atau disembunyikan. Fungsi utama Moq adalah untuk mencipta contoh olok-olok objek, yang pada asasnya tidak termasuk kaedah statik penyasaran.

Helah untuk mengejek kaedah sambungan adalah untuk menyedari bahawa ia pada asasnya hanyalah kaedah statik yang menyamar sebagai kaedah contoh. Untuk melakukan ini kita perlukan:

  1. Ekstrak kaedah sambungan ke dalam kelas utiliti statik: Alihkan kaedah sambungan ke dalam kelas khusus yang mengandungi hanya kaedah statik. Ini membolehkan kami mengasingkan kaedah sambungan untuk ujian.
  2. Buat contoh olok-olok kelas utiliti: Menggunakan Moq, kita boleh mencipta contoh olok-olok kelas utiliti. Ini akan memberi kami akses kepada kaedah sambungan sebagai entiti yang boleh dipermainkan.
  3. Konfigurasikan olok-olok untuk mengembalikan hasil yang diingini: Setelah kami mempunyai contoh olok-olok kelas utiliti, kami boleh mengkonfigurasinya untuk mengembalikan hasil khusus yang diperlukan untuk ujian.

Berikut ialah contoh cara ini berfungsi:

<code class="language-csharp">// 在实用程序类中定义扩展方法
public static class Utility
{
    public static SomeType GetFirstWithId(this List<SomeType> list, int id)
    {
        return list.FirstOrDefault(st => st.Id == id);
    }
}

// 创建实用程序类的模拟实例
var mockUtility = new Mock<Utility>();

// 配置模拟以返回我们想要的结果
mockUtility.Setup(u => u.GetFirstWithId(It.IsAny<List<SomeType>>(), 5)).Returns(new SomeType { Id = 5 });

// 设置测试
var listMock = new Mock<List<SomeType>>();
listMock.Setup(l => l.Count).Returns(0); // 此示例中列表中没有实际项目

// 测试的断言
Assert.That(listMock.Object.GetFirstWithId(5), Is.Not.Null);</code>
Salin selepas log masuk

Dengan mengalihkan kaedah sambungan ke dalam kelas utiliti statik dan mengejek kelas itu sendiri, kami berjaya mengatasi had yang tidak dapat secara langsung mengatasi kaedah sambungan statik. Penyelesaian ini memastikan bahawa ujian anda kekal teguh walaupun kaedah sambungan masa hadapan gagal.

Atas ialah kandungan terperinci Bagaimana Mengejek Kaedah Sambungan Menggunakan 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