2009-06-01 3 views
1

私はコンソールアプリケーションの起動時にインスタンス化され、静的変数に格納されるLoggingクラスを持っています。グローバル設定がインスタンスに渡されるか、直接参照される

クラスをコンストラクタ内のクラスに渡すか、直接参照する必要がある場合は、クラスを使用しますか?

私は単体テストを書こうとしていますが、私はそれを行うことができるはずです。ちょうど私はそれを使用するコードを呼び出す前に静的変数を設定する必要があることを意味します。

乾杯。

答えて

0

クラスを可能な限りテスト可能にするには、ロガーを含むすべての依存関係を可能な限り渡す必要があります。これはDependency Injection(DI)と呼ばれるもので、ユニットのテスト可能なコードを記述するための非常に一般的で標準的なパターンです。ロギングはほとんどの場合、メソッドの本体に埋め込まれたクロスカッティングの問題です。なぜなら、これらの問題を適切に引き出して宣言的に適用するための適切なAOPフレームワークが実際には存在しないからです。単体テストの作成/実行時のログを処理するだけで、テストの複雑さが増し、テストをできるだけシンプルで目標に絞ったほうがよい場合には、設定上の懸案事項が追加される可能性があります。

+0

しかし私はそれがロギングを必要とするすべてのクラスがそれにロガーのインスタンスを渡す必要があるということに同意するものとします。これはあまりにも忙しいだろうか? – Schotime

0

あなたはそれのインスタンスを作成し、そのプロパティを使用して、同じクラス&リターンの一員としてそのインスタンスを格納することができます。

Logger.Default
これは、作成されたインスタンスへの参照を返します。

EDIT:この例は、Consoleクラス&のSetOutメソッドです。 私はあなたがConsole.WriteLine ....を使用し続けることができ、ストリームを変更したい場合は、SetOutメソッドを使用することを意味します。出力を新しいストリームにリダイレクトします。

希望に役立ちます。

+0

全員へのリクエスト:投票停止時のあなたのポイントを説明してください。それは私が物事を理解し、自分自身を正し、なぜこの答えが役に立たないのかを学ぶのに役立ちます。 – shahkalpesh

+0

downvoteを説明することは実際にこのサイトのDNAの一部ではありませんが、おそらくここでは重要ではないでしょう。すべての答えは(おそらく1つを除いて)非常に短期間で下降していました。 –

+0

サイトにはDNAが含まれてはいけません。しかし、人々は礼儀のDNAを持っているはずです;) – shahkalpesh

1

あなたが探しているようなサウンドは、ある種のIoC containerです。あなたはEntLib's Unityやそれ以外の何かを使うことができます。

関連する問題