Ich habe gelesen diese Stelle darüber, wie man private Methoden testet. Ich teste sie normalerweise nicht, weil ich immer dachte, dass es schneller ist, nur öffentliche Methoden zu testen, die von außerhalb des Objekts aufgerufen werden. Testen Sie private Methoden? Sollte ich sie immer testen?
Antworten
Zu viele Anzeigen?Wir testen private Methoden durch Inferenz, d. h. wir streben eine Testabdeckung der gesamten Klasse von mindestens 95 % an, lassen unsere Tests aber nur öffentliche oder interne Methoden aufrufen. Um die Abdeckung zu erreichen, müssen wir je nach den verschiedenen Szenarien, die auftreten können, mehrere Aufrufe an die öffentlichen/internen Methoden machen. Dadurch werden unsere Tests gezielter auf den Zweck des zu testenden Codes ausgerichtet.
Die Antwort von Trumpi auf den von Ihnen verlinkten Beitrag ist die beste.
Ich habe über dieses Thema für eine Weile schmoren vor allem mit dem Versuch meine Hand auf TDD.
Ich bin auf zwei Beiträge gestoßen, die meiner Meinung nach dieses Problem im Falle von TDD gründlich genug behandeln.
- Testen privater Methoden, TDD und testgetriebenes Refactoring
- Testgetriebene Entwicklung ist kein Testen
Zusammengefasst:
-
Bei der Verwendung von Techniken der testgetriebenen Entwicklung (Design) sollten private Methoden nur während des Re-Factoring-Prozesses von bereits funktionierendem und getesteten Code entstehen.
-
Es liegt in der Natur des Prozesses, dass jedes Stück einfacher Implementierungsfunktionalität, das aus einer gründlich getesteten Funktion extrahiert wird, selbst getestet wird (d.h. indirekte Testabdeckung).
Mir scheint es klar zu sein, dass zu Beginn der Programmierung die meisten Methoden Funktionen auf höherer Ebene sein werden, da sie das Design kapseln/beschreiben.
Daher werden diese Methoden öffentlich sein, und es wird einfach sein, sie zu testen.
Die privaten Methoden werden später folgen, wenn alles gut funktioniert und wir aus Gründen der Übersichtlichkeit das Factoring wieder aufnehmen. Lesbarkeit et Sauberkeit .
Wie oben zitiert: "Wenn Sie Ihre privaten Methoden nicht testen, woher wissen Sie dann, dass sie nicht kaputt gehen?"
Dies ist ein wichtiges Thema. Einer der wichtigsten Punkte der Unit-Tests ist zu wissen, wo, wann und wie etwas brach ASAP. Dadurch wird ein erheblicher Teil des Entwicklungs- und Qualitätssicherungsaufwands verringert. Wenn nur die Öffentlichkeit getestet wird, dann haben Sie keine ehrliche Abdeckung und Abgrenzung der Interna der Klasse.
Ich habe herausgefunden, dass es am besten ist, die Testreferenz zum Projekt hinzuzufügen und die Tests in einer Klasse parallel zu den privaten Methoden durchzuführen. Fügen Sie die entsprechende Build-Logik ein, damit die Tests nicht in das endgültige Projekt eingebaut werden.
Dann haben Sie alle Vorteile, die sich aus der Prüfung dieser Methoden ergeben, und Sie können Probleme in Sekunden statt in Minuten oder Stunden finden.
Zusammenfassend lässt sich also sagen: Ja, testen Sie Ihre privaten Methoden.