Heim > Backend-Entwicklung > C++ > Wie kann ich private Methoden in C# effektiv Unit-Tests unter Vermeidung von Laufzeitfehlern durchführen?

Wie kann ich private Methoden in C# effektiv Unit-Tests unter Vermeidung von Laufzeitfehlern durchführen?

Susan Sarandon
Freigeben: 2025-01-18 21:38:10
Original
327 Leute haben es durchsucht

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

Herausforderungen beim Unit-Testen privater Methoden in C#

Unit-Tests privater Methoden in C# können aufgrund ihrer gekapselten Natur schwierig sein. Obwohl Visual Studio automatisch generierte Zugriffsklassen bereitstellt, können beim Testen dennoch Laufzeitfehler auftreten.

Codebeispiele und Testfälle

Betrachten Sie den folgenden Codeausschnitt und den entsprechenden Test:

<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>
Nach dem Login kopieren

Laufzeitfehler

Kompilierung erfolgreich, aber Laufzeitfehler aufgrund eines Typkonvertierungsproblems:

<code>无法将类型为 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA_Accessor+TypeB]' 的对象转换为类型为 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA+TypeB]' 的对象。</code>
Nach dem Login kopieren

Die Hauptursache ist, dass target vom Typ TypeA_Accessor ist, nicht vom erwarteten TypeA. Diese Nichtübereinstimmung führt dazu, dass die Konvertierung fehlschlägt.

Lösung

Vor .NET Core 2.0

Verwenden Sie die Klasse PrivateObject, um auf private Methoden und Felder zuzugreifen:

<code class="language-csharp">PrivateObject target = new PrivateObject(new TypeA());
var retVal = target.Invoke("MyFunc");</code>
Nach dem Login kopieren

.NET Core 2.0 und höher

Die Klasse

PrivateObject wird nicht mehr unterstützt. Die Alternative besteht darin, die private Methode zu Testzwecken auf internal zu setzen oder eine Umgestaltung des Codes in Betracht zu ziehen, um zu vermeiden, dass die private Methode getestet werden muss.

Das obige ist der detaillierte Inhalt vonWie kann ich private Methoden in C# effektiv Unit-Tests unter Vermeidung von Laufzeitfehlern durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage