LernMoment / community-fragen

C# Fragen aus der LernMoment Community zum lernen und üben in der LernMoment Community.
The Unlicense
2 stars 3 forks source link

Antwort zu Frage: TES-1: Wie sollten private Methoden einer Klasse getestet werden? #12

Open MK-NEUKO opened 3 years ago

MK-NEUKO commented 3 years ago

@suchja Hier meine Antwort zur Frage: TES-1: Wie sollten private Methoden einer Klasse getestet werden?

Da ich mich gerade mit dem Testen beschäftige, versuche ich es mal mit dieser Frage. Grundsätzlich würde ich sagen, kommt man an die Stelle, eine private Methode testen zu müssen, dann stimmt etwas mit dem Designe nicht. Hätte ich eine öffentliche Methode, in der eine private Methode aufgerufen wird und deren Code nur teilweise, oder gar nicht ausgeführt wird. Stellt sich mir die Frage. Wozu dient dieser Code wenn er nicht aufgerufen wird und warum soll ich diesen testen und nicht löschen? Auch der Compiler würde sich melden, wenn Code geschrieben wird, der nie erreicht wird. Clean Code ist hier das Richtige, das ist meine Meinung dazu. Es gibt da gewisse Prinzipien an denen man sich Orientieren kann. Unter dem Stichwort Clean Code wird man in jedem Fall fündig werden. Separation of Concerns (SoC) und Single Level of Abstraction (SLA) um nur zwei zu nennen. Aber zurück zu den Tests, ich habe versucht mit der aktuellen Version von MSTest eine Private Methode zu testen. Es hat nicht funktioniert, oder ich habe nicht die richtige Funktionalität dafür gefunden. Denn in einem aktuellen und bekannten Fachbuch zu C#, in dem Kapitel UnitTest, heißt es:

[TestMethod]
public void Test_IsPositive()
{  
    PrivateObject obj = new PrivateObject(typeof(Calculator));  
    bool actual = (bool)obj.Invoke("IsPositive", 5);  
    Assert.IsTrue(actual);
}

Dieses Beispiel bezieht sich auf eine Version des .NET Framework. Wie das bei anderen Test-Frameworks aussieht, (xUnit, NUnit), weiß ich nicht, dazu fehlt mir noch einiges an Wissen und Erfahrung. Abschließend kann ich nur sagen, man sollte seinen Code so gestallten, dass man nicht in die Situation kommt, private Methoden testen zu müssen.