Ich habe versucht, mir angewöhnen, regelmäßig Unit-Tests mit meinem Code zu schreiben , aber ich habe gelesen, dass es zuerst wichtig ist, testbaren Code zu schreiben . Diese Frage berührt die SOLID-Prinzipien des Schreibens von testbarem Code, aber ich möchte wissen, ob diese Designprinzipien nützlich (oder zumindest nicht schädlich) sind, ohne überhaupt Tests schreiben zu wollen. Zur Klarstellung: Ich verstehe, wie wichtig es ist, Tests zu schreiben. Dies ist keine Frage ihrer Nützlichkeit.
Um meine Verwirrung zu veranschaulichen, gibt der Autor in dem Stück , das diese Frage inspiriert hat, ein Beispiel für eine Funktion an, die die aktuelle Uhrzeit überprüft und je nach Uhrzeit einen bestimmten Wert zurückgibt. Der Autor weist darauf hin, dass der Code fehlerhaft ist, da er die Daten (die Zeit) erzeugt, die er intern verwendet, was das Testen erschwert. Für mich scheint es jedoch übertrieben, die Zeit als Argument zu vergehen. Irgendwann muss der Wert initialisiert werden, und warum nicht am nächsten am Verbrauch? Außerdem ist der Zweck der Methode in meinem Kopf, einen Wert basierend auf der aktuellen Zeit zurückzugeben , indem Sie ihn zu einem Parameter machen, der impliziert, dass dieser Zweck geändert werden kann / sollte. Diese und andere Fragen führen mich zu der Frage, ob testbarer Code gleichbedeutend mit "besserem" Code ist.
Ist das Schreiben von testbarem Code auch dann noch eine gute Übung, wenn keine Tests durchgeführt wurden?
Ist testbarer Code tatsächlich stabiler? wurde als Duplikat vorgeschlagen. Bei dieser Frage geht es jedoch um die "Stabilität" des Codes, aber ich frage mich allgemeiner, ob der Code auch aus anderen Gründen überlegen ist, z. B. aus Gründen der Lesbarkeit, Leistung, Kopplung usw.
func(X)
Rückkehr "Morning"
, dann alle Vorkommen zu ersetzen , func(X)
mit "Morning"
wird das Programm nicht ändern (dh Berufung. func
Tut nichts anderes als den Wert zurück). Idempotency impliziert entweder, dass func(func(X)) == X
(die nicht func(X); func(X);
func(X)