Inwieweit testen Sie interne / private Komponenten einer Klasse / eines Moduls / Pakets / usw.? Testen Sie sie überhaupt oder testen Sie nur die Schnittstelle zur Außenwelt? Ein Beispiel für diese internen Methoden sind private Methoden.
Stellen Sie sich als Beispiel einen rekursiven Descent-Parser vor , der mehrere interne Prozeduren (Funktionen / Methoden) enthält, die von einer zentralen Prozedur aufgerufen werden. Die einzige Schnittstelle zur Außenwelt ist die zentrale Prozedur, die eine Zeichenfolge verwendet und die analysierten Informationen zurückgibt. Die anderen Prozeduren analysieren verschiedene Teile der Zeichenfolge und werden entweder von der zentralen Prozedur oder von anderen Prozeduren aufgerufen.
Natürlich sollten Sie die externe Schnittstelle testen, indem Sie sie mit Beispielzeichenfolgen aufrufen und mit der von Hand analysierten Ausgabe vergleichen. Aber was ist mit den anderen Verfahren? Würden Sie sie einzeln testen, um zu überprüfen, ob sie ihre Teilzeichenfolgen korrekt analysieren?
Ich kann mir ein paar Argumente vorstellen:
Vorteile :
- Mehr Tests sind immer besser, und dies kann dazu beitragen, die Codeabdeckung zu erhöhen
- Bei einigen internen Komponenten ist es möglicherweise schwierig, bestimmte Eingaben (z. B. Flankenfälle) über die externe Schnittstelle vorzunehmen
- Klarere Prüfung. Wenn eine interne Komponente einen (behobenen) Fehler aufweist, wird durch einen Testfall für diese Komponente deutlich, dass sich der Fehler in dieser bestimmten Komponente befand
Nachteile :
- Refactoring wird zu schmerzhaft und zeitaufwändig. Um etwas zu ändern, müssen Sie die Komponententests neu schreiben, auch wenn die Benutzer der externen Schnittstelle nicht betroffen sind
- Einige Sprachen und Test-Frameworks erlauben dies nicht
Was sind deine Meinungen?