Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menguji Unit Kaedah Peribadi dengan Berkesan dalam C# Semasa Mengelakkan Ralat Masa Jalan?

Bagaimanakah Saya Boleh Menguji Unit Kaedah Peribadi dengan Berkesan dalam C# Semasa Mengelakkan Ralat Masa Jalan?

Susan Sarandon
Susan Sarandonasal
2025-01-18 21:38:10286semak imbas

How Can I Effectively Unit Test Private Methods in C# While Avoiding Runtime Errors?

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

Kelas

PrivateObject 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!

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