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
Lepaskan: 2025-01-18 21:38:10
asal
340 orang telah melayarinya

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:

// 被测试单元
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();
}
Salin selepas log masuk

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>
Salin selepas log masuk

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:

PrivateObject target = new PrivateObject(new TypeA());
var retVal = target.Invoke("MyFunc");
Salin selepas log masuk

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