Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menguji Unit Kaedah Peribadi dengan Berkesan dalam C# Semasa Mengelakkan Ralat Masa Jalan?
Cabaran Unit Menguji Kaedah Persendirian dalam C#
Ujian kaedah persendirian dalam C# boleh menjadi rumit kerana sifat terkapsulnya. Walaupun Visual Studio menyediakan kelas aksesor yang dijana secara automatik, ralat masa jalan mungkin masih berlaku semasa ujian.
Contoh kod dan kes ujian
Pertimbangkan coretan kod berikut dan ujian yang sepadan:
<code class="language-csharp">// 被测试单元 class TypeA { private List<TypeB> myList = new List<TypeB>(); private void MyFunc() { /* 忽略处理过程 */ } } // 单元测试 public void MyFuncTest() { TypeA_Accessor target = new TypeA_Accessor(); target.myList.Add(new TypeA_Accessor.TypeB()); target.MyFunc(); }</code>
Ralat masa jalan
Kompilasi berjaya, tetapi ralat masa jalan disebabkan oleh isu penukaran jenis:
<code>无法将类型为 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA_Accessor+TypeB]' 的对象转换为类型为 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA+TypeB]' 的对象。</code>
Puncanya ialah target
adalah jenis TypeA_Accessor
, bukan seperti yang dijangkakan TypeA
. Ketidakpadanan ini menyebabkan penukaran gagal.
Penyelesaian
Sebelum .NET Core 2.0
Gunakan kelas PrivateObject
untuk mengakses kaedah dan medan peribadi:
<code class="language-csharp">PrivateObject target = new PrivateObject(new TypeA()); var retVal = target.Invoke("MyFunc");</code>
.NET Core 2.0 dan ke atas
KelasPrivateObject
tidak lagi disokong. Alternatifnya ialah menetapkan kaedah persendirian kepada internal
untuk tujuan ujian, atau pertimbangkan untuk memfaktorkan semula kod untuk mengelakkan keperluan untuk menguji kaedah persendirian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguji Unit Kaedah Peribadi dengan Berkesan dalam C# Semasa Mengelakkan Ralat Masa Jalan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!