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处理 } }
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:
// 在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的更改状态 }
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!