Unit-Tests privater C#-Methoden: Herausforderungen und Lösungen
Das direkte Unit-Testen privater Methoden in C# ist aufgrund ihrer Kapselung problematisch. Während Visual Studio hierfür Zugriffsklassen generiert, können Laufzeitfehler auftreten, z. B. Fehler bei der Objektkonvertierung bei der Interaktion mit privaten Listen. Dies ist häufig auf Typkonflikte zwischen der Zugriffsklasse und der Zielklasse zurückzuführen.
Das Problem:
Ein häufiges Szenario ist, dass ein Komponententest während der Ausführung aufgrund eines Objektkonvertierungsfehlers fehlschlägt, wenn versucht wird, ein Element zu einer privaten Liste hinzuzufügen. Der Listentyp der Accessor-Klasse unterscheidet sich vom Listentyp der Originalklasse.
Lösung des Problems:
Veralteter Ansatz: PrivateObject
Klasse:
In Versionen von .NET vor .NET Core 2.0 bot die Klasse PrivateObject
eine Möglichkeit, private Methoden aufzurufen:
<code class="language-csharp">Class target = new Class(); PrivateObject obj = new PrivateObject(target); var retVal = obj.Invoke("PrivateMethod"); Assert.AreEqual(expectedVal, retVal);</code>
Wichtig: PrivateObject
und PrivateType
werden in .NET Core 2.0 und höher nicht mehr unterstützt.
Bessere Alternativen:
Die Best Practices raten generell davon ab, private Methoden direkt zu testen. Hier erfahren Sie, warum und was Sie stattdessen tun können:
Das obige ist der detaillierte Inhalt vonWie kann ich private Methoden in C# effektiv einem Unit-Test unterziehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!