Heim > Backend-Entwicklung > C++ > Wie kann ich private Methoden in C# einem Unit-Test unterziehen und Laufzeitfehler vermeiden?

Wie kann ich private Methoden in C# einem Unit-Test unterziehen und Laufzeitfehler vermeiden?

Barbara Streisand
Freigeben: 2025-01-18 21:51:09
Original
480 Leute haben es durchsucht

How Can I Unit Test Private Methods in C# and Avoid Runtime Errors?

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

Alternative Methoden

Anstatt private Methoden direkt zu testen, sollten Sie die folgende Alternative in Betracht ziehen:

  • Testen einer öffentlichen Methode, die eine private Methode aufruft: Durch Testen des Verhaltens einer öffentlichen Methode können Sie indirekt die Funktionalität der internen Methode überprüfen.
  • Umgestaltung zum Entfernen privater Methoden: Wenn möglich, extrahieren Sie private Methoden in eine neue öffentliche oder geschützte Klasse, damit sie direkt getestet werden können.
  • Abhängigkeitsinjektion verwenden: Erstellen Sie Abstraktionen für interne Komponenten und injizieren Sie sie in die zu testende Klasse, um den Testaustausch zu erleichtern.

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!

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