7

次のような再現が困難な場合にのみ到達するコードの特定のパスを実行したいときはいつでもcondition:

if (condition) { code to be tested }

私はorそれをtrue値で:

if (true || condition) { code to be tested }

よりエレガントなアプローチはありますか?

4

5 に答える 5

13

私はもっ​​と多く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 }
于 2012-12-28T13:09:08.560 に答える
13

よりエレガントなソリューションは、モックを使用することです。依存関係またはパラメーターに基づいて決定を下します。

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
}
于 2012-12-28T13:04:36.540 に答える
3

「trueor」を使用したアプローチ、およびif(!condition)のアプローチが最も単純です。これが私が大規模なプログラムで好きなアプローチです

関数を作成し、それをtestme(const string)と呼びましょう。そして、if testにtrueを挿入する代わりに、そのコードを識別する文字列を使用してtestmeを挿入します。

    if ( testme("Location 123") || condition ) { code to be tested }

次に、ある種の構成ファイル、またはプログラムへの引数(私は構成を好む)を使用して、testme( "Location 123")がtrueを返すタイミングを完全に制御できます。そして、あなたは多くの場所で同じ機能を使うことができます。設定ファイルを変更するだけで、それぞれをテストできます。

于 2012-12-28T13:22:21.047 に答える
2

テストするコードを別のメソッドに入れます。次に、メソッドを呼び出して条件をバイパスできます。これで、「true」を追加したり、さらに重要なことにそれを削除するのを忘れたりすることを心配する必要がなくなります。

メソッドに単体テストを追加して、渡されたパラメーターを変更し、必要なすべてのシナリオをテストできるようにすることもできます。

于 2012-12-28T15:32:35.467 に答える
2

質問で言及されていないため、これは単体テストのシナリオではないと想定します。このようなコードのオンザフライ テストを行う最も簡単な方法は、デバッガーの Set Next Statement コマンドを使用することです。

必要に応じて if() ステートメントにブレークポイントを設定するか、そのステートメントに到達するまでコードをステップ実行します。次に、if() ステートメント本体内の次の行を右クリックし、[次のステートメントを設定] を選択します。コードはその行から実行を再開し、if() を完全にスキップします。

于 2012-12-28T13:17:32.440 に答える