Konstanten sind wunderbare Menschen - sie können an einer einzigen Stelle einen Wert speichern, der überall in Ihrem Code verwendet wird. Das Ändern dieses Wertes erfordert nur eine einfache Änderung.
Das Leben ist cool.
Nun, das ist das Versprechen. Die Realität ist manchmal anders:
- Sie ändern die
LogCompleteFileName
konstanter Wert ausL:\LOGS\MyApp.log
a\\Traces\App208.txt
und Sie erhalten zwei Dateien :\\traces\App208.txt
für die Spuren und\\traces\App208.txt.log
für die Protokolle... - Sie ändern
TransactionTimeout
von 2 auf 4 Minuten zu ändern, und Sie erhalten immer noch eine Zeitüberschreitung nach 2 Minuten (nachdem Sie den Tag damit verbracht haben, herauszufinden, dass Sie auch die Zeitüberschreitung des DBMS und die Zeitüberschreitung des Transaktionsmanagers ändern müssen...). - Sie ersetzen
SleepTimeInMinutes
de1
a10
und Sie sehen keine Veränderung (nach etwa einer Stunde stellen Sie fest, dass der Name der Konstante irreführend war: die Granularität ist nicht die Minute, sondern die Millisekunde...). - Noch subtiler: Sie ändern
CompanyName
von, sagen wirYahoo
aMicrosoft
aber automatische E-Mail-Benachrichtigungen werden immer noch gesendet analert@yahoo.com
...
Die Erstellung einer Konstante ist ein Vertrag. Sie teilen Ihren Lesern mit, dass der Wert, wenn sie ihn ändern, immer noch so funktioniert, wie sie denken, dass er sein sollte.
Nicht weniger.
Natürlich müssen Sie prüfen, ob Sie Ihre Leser nicht in die Irre führen. Sie müssen sicherstellen, dass der implizierte Vertrag richtig ist.
Wie kann man das mit TDD erreichen? Damit komme ich einfach nicht weiter. Die einzige Möglichkeit, wie ich eine Änderung für einen konstanten (!) Wert testen kann, ist, diese Konstante zu einer Anwendungseinstellung zu machen... Sollte ich zu dem Schluss kommen, dass die const
Schlüsselwort vermieden werden sollte, wenn ich denke, dass sich der Wert ändern kann und wird?
Wie testen Sie Ihre (so genannten) Konstanten mit TDD?
Vielen Dank im Voraus :)