テストのコンテキストで条件付き属性を使用する良い方法はありますか?
私の考えは、あなたがこれを行うことができれば:
[Conditional("Debug")]
public void DebugMethod()
{
//...
}
多分あなたはいくつかの用途があるかもしれません: (?)
[Conditional("Test")]
public void TestableMethod()
{
//...
}
テストのコンテキストで条件付き属性を使用する良い方法はありますか?
私の考えは、あなたがこれを行うことができれば:
[Conditional("Debug")]
public void DebugMethod()
{
//...
}
多分あなたはいくつかの用途があるかもしれません: (?)
[Conditional("Test")]
public void TestableMethod()
{
//...
}
より良い代替手段がある場合、用途がわかりません: テスト プロジェクト。
この機能をより適切な方法で実現するには、NUnit または MSTest を使用します。
私はMehrdadの答えを受け入れます-これらの属性をいつ使用するかについて、より多くのコンテキストを提供したかっただけです:
のような[Conditional]
ものは、ロギング/トレース、または実行中のデバッガーとの対話などを制御するために、より一般的に使用されます。呼び出しが通常のコードの途中にあるのは理にかなっていますが、特定のビルドでは望ましくない場合があります (そして #if... などは非常に醜く、忘れがちです)。
テスト コードが製品の一部でない場合は、製品コード ベースに含めるべきではありません。テスト対象のオブジェクトと同じプロジェクトに単体テストを含めようとしているプロジェクトを見てきましたが、#if
ステートメントを使用してそれらをデバッグ ビルドにのみ含め、後で後悔するだけです。
明らかな問題の 1 つは、アプリケーション プロジェクトが単体テスト フレームワークへの参照を取得することです。そのフレームワークを製品の一部として出荷する必要はないかもしれませんが (リリース ビルド内のコードがそれを参照しないことを保証できる場合)、それでも私には少しおかしな匂いがします。
テスト コードをテスト コード、製品コードを製品コードとし、製品コードにはそれについての手がかりがないようにします。
これに関するもう 1 つの問題は、リリース ビルドで単体テストを実行したい場合があることです。(私たちは確かにそうします)。