ほとんどのアプリケーションでは、シングルトンまたは静的な「構成」オブジェクトを使用して、ディスクからさまざまな設定を読み取ります。ほぼすべてのクラスがさまざまな目的で使用します。基本的には、名前/値のペアの単なるハッシュテーブルです。それは読み取り専用なので、私はそんなにグローバルな状態を持っているという事実にあまり関心がありません。しかし、ユニットテストを始めた今、問題になり始めています。
1つの問題は、通常、実行するのと同じ構成でテストしたくないということです。これにはいくつかの解決策があります。
- configオブジェクトに、テストにのみ使用されるセッターを与えると、異なる設定を渡すことができます。
- 単一の構成オブジェクトの使用を続けますが、シングルトンから、必要なすべての場所に渡すインスタンスに変更します。その後、アプリケーションで1回、テストで1回、さまざまな設定で構築できます。
しかし、どちらにしても、2番目の問題が残っています。ほとんどすべてのクラスがconfigオブジェクトを使用できます。そのため、テストでは、テストするクラスの構成を設定する必要がありますが、その依存関係もすべて設定する必要があります。これにより、テストコードが見苦しくなります。
この種の設定オブジェクトは悪い考えだという結論に達し始めています。どう思いますか?いくつかの選択肢は何ですか?そして、どこでも設定を使用するアプリケーションのリファクタリングをどのように開始しますか?