C#-Unittests privater Methoden: Laufzeitfehler vermeiden
In C# können Sie die automatisch generierten Accessor-Klassen von Visual Studio verwenden, um private Methoden zu testen. Allerdings können Laufzeitfehler auftreten, wenn versucht wird, den internen Zustand des Objekts durch diese Tests zu manipulieren.
Grundlegendes Problem
Der im bereitgestellten Code aufgetretene Fehler ist darauf zurückzuführen, dass das Accessor-Klassenziel zur Kompilierungszeit als TypeA_Accessor, zur Laufzeit jedoch als TypeA behandelt wird. Diese Nichtübereinstimmung führt dazu, dass der Add()-Vorgang für target.myList fehlschlägt, da die Listentypen unterschiedlich sind.
Fehler beheben
In Versionen vor .NET Core 2.0 können Sie die PrivateObject-Klasse verwenden, um auf private Methoden zuzugreifen. Dies erfordert die folgenden Schritte:
Class target = new Class(); PrivateObject obj = new PrivateObject(target); var retVal = obj.Invoke("PrivateMethod"); Assert.AreEqual(expectedVal, retVal);
Alternative Methoden
Anstatt private Methoden direkt zu testen, sollten Sie die folgende Alternative in Betracht ziehen:
Bitte beachten Sie, dass die Unterstützung für PrivateObject und PrivateType in .NET Core 2.0 und höher entfernt wurde und alternative Methoden erforderlich sind, um in neueren Versionen des Frameworks auf private Methoden zuzugreifen und diese zu testen.
Das obige ist der detaillierte Inhalt vonWie kann ich private Methoden in C# einem Unit-Test unterziehen und Laufzeitfehler vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!