ひどいタイトルを前もってお詫びします-提案を歓迎します!
私は DI と AOP について読んできましたが、基本は理解できたと思います。少なくとも、ロギングを追加する標準的な例については。
これを NUnit で作成しているテスト ケースに適用したいと思います。たとえば、すべてのテスト ケース メソッドとそれらが呼び出す「ヘルパー メソッド」の入口/出口ログを自動的に追加できるようにします。(そして、私は NUnit に縛られていません。別のフレームワークの方が簡単な場合は、お知らせください。)
注 - これはテスト中の被験者に関するものではありません。これらの手法をテストケース自体に適用したいと考えています。
PostSharpを使用してこれを行う方法は非常に明確です。これは最初の例です。ただし、この実験のためだけに、彼らのライセンスの取り扱いを私たちのプロジェクトに追加したくはありません。
C# 用の AOP について私が見つけた他のすべてのリファレンスは、CastleWindsor、Unity、Spring.Net などの IoC コンテナー実装によって提供される (動的) インターセプターに基づいています。この場合、これらすべてに共通の問題があります。インターセプターを追加するオブジェクトのプロキシを作成するセットアップ コードの一部。(当初、このコードは IoC コンテナーも作成する必要があると思っていましたが、間違っていることがわかりました。)
しかし、このセットアップ コードが nUnit テストケースのどこに行くのかわかりません。
私が思いついたオプションとその問題:
- testfixture クラスのコンストラクターにそれ自体へのプロキシを作成させます。再帰が原因で機能しません (消費者が物を要求し、物がプロキシを物に戻そうとし、プロキシが物を作成しようとしています...このStackOverflowの質問を読んでから)
- 私自身の反射ベースの魔法をロールバックします(これは私にとって大きな仕事になるでしょう)
- コンストラクターに testfixture クラスのすべてのメソッドをラップさせ、この「ラップされた」オブジェクトを返します (コンストラクターがこれを実行できるかどうかはわかりません)。
- テストフィクスチャで静的コンストラクターを使用してこの魔法を行います (クラスのメソッドを動的にラップできると仮定します)。
- ( Einar Egilsson の InjectModuleInitializerを介して) モジュール cctor を使用してモジュール レベルで何かを行い、すべてのクラスのすべてのメソッドをログでラップします。
- 最も単純なもの: テストケース (テストのパラメーターではない) をインスタンス化するためのある種のファクトリ。そこから IoC プロキシ ジェネレーターの 1 つを使用できます。
- nUnit の場合: これを行う唯一の方法は、カスタム AddInを作成することです。利点 - ReSharper との統合が損なわれない可能性があります。欠点 - 特に NUnit の更新時に、すべての開発マシンに展開します。nUnitでこれを行う他の方法はありますか?
- MbUnitの場合:テストケースをファーストクラスの値として扱うように見えますが、これは簡単です。利点: すべての開発者に簡単にデプロイできます。欠点: テストは Resharper に表示されません。補足:セットアップとティアダウンの処理方法。
選択肢や結論に何か見落としがありますか?
私が見逃したこれを行う簡単な方法はありますか?