Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menguji Kaedah Persendirian dengan Berkesan dalam C# Apabila Menghadapi Percanggahan Jenis?

Bagaimanakah Saya Boleh Menguji Kaedah Persendirian dengan Berkesan dalam C# Apabila Menghadapi Percanggahan Jenis?

Mary-Kate Olsen
Lepaskan: 2025-01-18 21:47:10
asal
257 orang telah melayarinya

How Can I Effectively Test Private Methods in C# When Facing Type Discrepancies?

Ujian Kaedah Persendirian C#

Untuk mencapai liputan kod penuh, kaedah persendirian perlu diuji. Satu cara ialah menggunakan kelas pengakses yang dijana oleh Visual Studio. Walau bagaimanapun, pendekatan ini mungkin menghadapi ralat masa jalan kerana jenis tidak sepadan.

Pertimbangkan coretan kod berikut:

// 在MyProj项目中
class TypeA
{
    private List<TypeB> myList = new List<TypeB>();

    private class TypeB
    {
        public TypeB()
        {
        }
    }

    public TypeA()
    {
    }

    private void MyFunc()
    {
        // 更改实例状态的myList处理
    }
}
Salin selepas log masuk

Soalan:

Ujian unit untuk kaedah peribadi MyFunc gagal pada masa jalan dengan ralat berikut:

<code>无法将类型为'System.Collections.Generic.List`1[MyProj.TypeA.TypeA_Accessor+TypeB]'的对象转换为类型为'System.Collections.Generic.List`1[MyProj.TypeA.TypeA+TypeB]'的对象。</code>
Salin selepas log masuk

Ini kerana kelas pengakses menjana pelaksanaan myList yang berbeza dengan parameter jenis yang berbeza.

Penyelesaian:

Dalam versi .NET Core lebih awal daripada 2.0, anda boleh menggunakan kelas PrivateObject untuk memanggil kaedah peribadi:

// 在TestMyProj项目中
public void MyFuncTest()
{
    TypeA target = new TypeA();
    PrivateObject obj = new PrivateObject(target);
    // 下一行不会抛出异常
    obj.Invoke("myList", new object[] { new TypeA_Accessor.TypeB() });
    obj.Invoke("MyFunc");

    // 检查target的更改状态
}
Salin selepas log masuk

Walau bagaimanapun, .NET Core 2.0 dan lebih baru telah mengalih keluar sokongan untuk PrivateObject dan PrivateType. Dalam kes ini, pertimbangkan untuk memfaktorkan semula kod untuk menjadikan kaedah persendirian boleh diuji, atau menggunakan pendekatan berasaskan refleksi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguji Kaedah Persendirian dengan Berkesan dalam C# Apabila Menghadapi Percanggahan Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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