In den meisten meiner Anwendungen habe ich ein einzelnes oder statisches "config" -Objekt, das für das Lesen verschiedener Einstellungen von der Festplatte zuständig ist. Fast alle Klassen verwenden es für verschiedene Zwecke. Im Wesentlichen handelt es sich nur um eine Hash-Tabelle mit Name / Wert-Paaren. Es ist schreibgeschützt, daher habe ich mich nicht zu sehr mit der Tatsache beschäftigt, dass ich so einen globalen Staat habe. Aber jetzt, wo ich mit Unit-Tests anfange, wird es zu einem Problem.
Ein Problem ist, dass Sie normalerweise nicht mit derselben Konfiguration testen möchten, mit der Sie ausgeführt werden. Hierfür gibt es einige Lösungen:
- Geben Sie dem Konfigurationsobjekt einen Setter, der NUR zum Testen verwendet wird, damit Sie verschiedene Einstellungen übergeben können.
- Verwenden Sie weiterhin ein einzelnes Konfigurationsobjekt, aber ändern Sie es von einem Singleton in eine Instanz, die Sie überall dort weitergeben, wo sie benötigt wird. Dann können Sie es einmal in Ihrer Anwendung und einmal in Ihren Tests mit verschiedenen Einstellungen erstellen.
Wie auch immer, Sie haben immer noch ein zweites Problem: Fast jede Klasse kann das config-Objekt verwenden. In einem Test müssen Sie also die Konfiguration für die zu testende Klasse einrichten, aber auch ALLE ihre Abhängigkeiten. Dies kann Ihren Testcode hässlich machen.
Ich komme allmählich zu dem Schluss, dass diese Art von Konfigurationsobjekt eine schlechte Idee ist. Was denkst du? Welche Alternativen gibt es? Und wie können Sie eine Anwendung umgestalten, bei der die Konfiguration überall verwendet wird?