次のような再現が困難な場合にのみ到達するコードの特定のパスを実行したいときはいつでもcondition
:
if (condition) { code to be tested }
私はor
それをtrue
値で:
if (true || condition) { code to be tested }
よりエレガントなアプローチはありますか?
次のような再現が困難な場合にのみ到達するコードの特定のパスを実行したいときはいつでもcondition
:
if (condition) { code to be tested }
私はor
それをtrue
値で:
if (true || condition) { code to be tested }
よりエレガントなアプローチはありますか?
私はもっと多くelegant way
がとして使用していると思いますthe logical negation operator (!)
。
if (!condition) { code to be tested }
しかし、デバッグまたはテストの目的でより安全な方法として、プリプロセッサディレクティブを使用できます(私のcommetによる)。テストが終了したら、削除または変更するだけです#define UnreachableTest
#define UnreachableTest //should be on the top of the class/page
#if (UnreachableTest)
condition = !condition; //or
condition = true;
#endif
if (condition) { code to be tested }
よりエレガントなソリューションは、モックを使用することです。依存関係またはパラメーターに基づいて決定を下します。
var mock = new Mock<IFoo>();
mock.Setup(foo => foo.IsBar).Returns(true);
var sut = new Sut(mock.Object);
sut.DoSomething();
そして、テスト中のシステムで:
public void DoSomething()
{
if (_foo.IsBar)
// code path to test
}
「trueor」を使用したアプローチ、およびif(!condition)のアプローチが最も単純です。これが私が大規模なプログラムで好きなアプローチです
関数を作成し、それをtestme(const string)と呼びましょう。そして、if testにtrueを挿入する代わりに、そのコードを識別する文字列を使用してtestmeを挿入します。
if ( testme("Location 123") || condition ) { code to be tested }
次に、ある種の構成ファイル、またはプログラムへの引数(私は構成を好む)を使用して、testme( "Location 123")がtrueを返すタイミングを完全に制御できます。そして、あなたは多くの場所で同じ機能を使うことができます。設定ファイルを変更するだけで、それぞれをテストできます。
テストするコードを別のメソッドに入れます。次に、メソッドを呼び出して条件をバイパスできます。これで、「true」を追加したり、さらに重要なことにそれを削除するのを忘れたりすることを心配する必要がなくなります。
メソッドに単体テストを追加して、渡されたパラメーターを変更し、必要なすべてのシナリオをテストできるようにすることもできます。
質問で言及されていないため、これは単体テストのシナリオではないと想定します。このようなコードのオンザフライ テストを行う最も簡単な方法は、デバッガーの Set Next Statement コマンドを使用することです。
必要に応じて if() ステートメントにブレークポイントを設定するか、そのステートメントに到達するまでコードをステップ実行します。次に、if() ステートメント本体内の次の行を右クリックし、[次のステートメントを設定] を選択します。コードはその行から実行を再開し、if() を完全にスキップします。