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
Mary-Kate Olsenasal
2025-01-18 21:47:10259semak imbas

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:

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

    private class TypeB
    {
        public TypeB()
        {
        }
    }

    public TypeA()
    {
    }

    private void MyFunc()
    {
        // 更改实例状态的myList处理
    }
}</code>

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>

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:

<code class="language-csharp">// 在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的更改状态
}</code>

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:
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