2009-06-11 13 views
3

テストのコンテキストで条件付き属性を使用する良い方法はありますか?C#:テストに条件付き属性を使用する

[Conditional("Debug")] 
public void DebugMethod() 
{ 
    //... 
} 

は、たぶん、あなたがのために、いくつかの用途を持つことができ:(?)

[Conditional("Test")] 
public void TestableMethod() 
{ 
    //... 
} 

答えて

4

良くありますときに私は使用を見ないの

私の考えは、あなたがこれを行うことができるかどうかということでした代替案:テストプロジェクト。

NUnitまたはMSTestを使用すると、より機能的な方法でこの機能を実現できます。

+0

詳細をご覧ください。これは単なるブレインストーミングのことでした。私はちょうどそこにそれを投げた、私は分かりません。 –

+0

これを自動的に処理するテストフレームワークがあります。彼らはあなたのクラスを飾るために使用するいくつかの属性を提供します。これは良い説明かもしれない:http://www.nunit.org/index.php –

1

私はMehrdadの答えを受け入れるだろう - 私はちょうどあなたがこれらの属性を使用可能性がある場合に、より文脈与えたいと思った:[Conditional]よう

物事をより一般的で、ロギング/トレース、または相互作用のようなものを制御するために使用されています実行中のデバッガ。呼び出しが通常のコードの真中にあるのは理にかなっていますが、特定のビルドでは望ましくないかもしれません(#if ... etcはちょっと醜いので忘れやすいです)。

1

テストコードが製品の一部でない場合は、製品コードベースに含まれていてはなりません。私は、テストされたオブジェクトと同じプロジェクトに単体テストを含めるプロジェクトを見てきましたが、#ifステートメントを使って後でデバッグビルドにしか含めることはできません。

明らかな問題は、アプリケーションプロジェクトが単体テストフレームワークへの参照を取得することです。そのフレームワークを製品の一部として出荷する必要はないかもしれませんが(リリースビルドのコードがそれを参照しないことが保証されていれば)、それはやはりおかしなことになります。

テストコードをテストコードとし、プロダクションコードをプロダクションコードとし、プロダクションコードにはの手がかりがないようにします。

1

この問題のもう1つの問題は、リリースビルドで単体テストを実行したがっている可能性があることです。 (私たちは確かにやっています)。