3

コード化された UI で SpecFlow を使用して、WPF アプリケーションの自動テストを作成しています。

「Then」ステップ内に複数のアサーションがあり、そのうちのいくつかが失敗します。アサーションが失敗すると、テスト ケースは失敗し、実行は停止します。テスト ケースを実行の最後まで続行し、実行中に失敗したアサーションが存在した場合に最後のステップが実行されたときに、テスト ケース全体を失敗させたいと考えています。

部分的な解決策しか見つかりませんでした:

try
{
    Assert.IsTrue(condition)
}
catch(AssertFailedException ex)
{
    Console.WriteLine("Assert failed, continuing the run");
}

この場合、実行は最後まで行われますが、テスト ケースは合格としてマークされます。

ありがとう!

4

2 に答える 2

3

Listのを作りExceptionsます。例外が発生するたびに、それをキャッチしてリストに入れます。

属性AfterScenarioを持つメソッドを作成し、リストに例外が含まれているかどうかを確認します。true の場合、文字列化された例外のリストのメッセージで失敗をアサートします。これで、貴重な例外情報が失われることはなくなり、例外のチェックはAfterScenario属性のために常に最後に行われます。

于 2013-07-29T13:53:04.943 に答える
1

1 つの方法は、declare a を追加しbool thisTestFailedて false に初期化することです。ブロック内にcatchステートメントthisTestFailed = true;を追加し、テストの終わり近くに次のようなコードを追加します。

if ( thisTestFailed ) {
    Assert.Fail("A suitable test failed message");
}

もう 1 つの方法は、一連のAssert...ステートメントを一連のifテストに変換し、その後にAssert. それにはいくつかの方法があります。1 つの方法は次のとおりです。

bool thisTestFailed = false;
if ( ... the first assertion ... ) { thisTestFailed = true; }
if ( ... another assertion ... ) { thisTestFailed = true; }
if ( ... and another assertion ... ) { thisTestFailed = true; }
if ( thisTestFailed ) {
    Assert.Fail("A suitable test failed message");
}
于 2013-07-29T13:28:49.220 に答える