Bevor Sie eine solche Frage beantworten, müssen Sie entscheiden, was Sie tatsächlich erreichen möchten.
Sie schreiben Code. Sie hoffen, dass es seinen Vertrag erfüllt (mit anderen Worten, es tut, was es tun soll. Das Aufschreiben dessen, was es tun soll, ist für einige Menschen ein riesiger Fortschritt).
Um einigermaßen davon überzeugt zu sein, dass der Code das tut, was er tun soll, starren Sie entweder lange genug darauf oder Sie schreiben Testcode, der genügend Fälle testet, um Sie davon zu überzeugen, dass "wenn der Code alle diese Tests besteht, ist er korrekt".
Oft interessiert Sie nur die öffentlich definierte Oberfläche eines Codes. Wenn ich Ihre Bibliothek verwenden, es ist mir egal , wie Sie es vielleicht richtig funktionieren, nur , dass es funktioniert richtig funktioniert. Ich überprüfe, ob Ihre Bibliothek korrekt ist, indem ich Komponententests durchführe.
Aber Sie erstellen die Bibliothek. Es kann schwierig sein, es richtig zum Laufen zu bringen. Angenommen, ich kümmere mich nur darum, dass die Bibliothek die Operation X korrekt ausführt, sodass ich einen Komponententest für X durchführe. Sie, der Entwickler, der für die Erstellung der Bibliothek verantwortlich ist, implementieren X, indem Sie die Schritte A, B und C kombinieren, die jeweils völlig untrivial sind. Um Ihre Bibliothek zum Laufen zu bringen, fügen Sie Tests hinzu, um zu überprüfen, ob A, B und C jeweils korrekt funktionieren. Sie wollen diese Tests. Zu sagen "Du solltest keine Unit-Tests für private Methoden haben" ist ziemlich sinnlos. Sie möchten Tests für diese privaten Methoden. Vielleicht sagt dir jemand, dass das Testen privater Methoden falsch ist. Das bedeutet aber nur, dass Sie sie möglicherweise nicht "Komponententests", sondern "private Tests" nennen oder wie auch immer Sie sie nennen möchten.
Die Sprache Swift löst das Problem, dass Sie A, B, C nicht als öffentliche Methoden verfügbar machen möchten, nur weil Sie sie testen möchten, indem Sie Funktionen das Attribut "testable" zuweisen. Der Compiler ermöglicht den Aufruf von privaten testbaren Methoden aus Unit-Tests, jedoch nicht aus Nicht-Test-Code.