私のチームには、アプリケーションコードに対して実行される一連の単体テストライブラリがあります。残念ながら、それらは(予期しない)例外をスローしています。これは、ロギングコードが呼び出されており、オブジェクトが設定されていないためです。ロギングコードは、PostSharp(メソッド本体の実行の前後に呼び出される)を使用して設定したメソッド属性を介して実行されます。属性は呼び出さないでください。
PostSharpが役立つのはここです。PostSharpは、実行しないように指示する条件付きコンパイラ指令(SKIPPOSTSHARP)を探します。言い換えると、単体テストの実行中にディレクティブを定義すると、ロギングの側面とは関係なく目的のコードをテストできます。途中で不要な依存関係や複雑なモックコードを回避することに成功します。
これは素晴らしい!1つのキャッチを除いて...テストプロジェクトに対して定義された条件付きコンパイラ指令は、テスト対象のプロジェクトに対して定義されません。つまり、テスト対象のコードは引き続き属性を使用し、テストはすべて失敗します。
単体テストを実行する場合にのみ、ソリューション全体でコンパイラ指令を定義することは可能ですか?ソリューション全体に適用していなくても、単体テストを実行している場合にのみ、ディレクティブを特定のプロジェクトに適用できますか(これも同様に機能します)?
このアプローチについての意見も興味があります(AOPコードを介して分離とスケーラビリティを実現しようとしていますが、進行するにつれてジャンプするための追加のフープがいくつかあるようです)。
注:ここでは、統合テストについて話しているのではなく、単体テストについてのみ説明しています。特定の単体をテストしたいだけで、ロギングコードが機能するかどうかは関係ありません。これは、他の単体テスト(正常に機能します)によってテストされます。