4

VS UnitTestプロジェクトでのアサーションの標準的な動作は、特定の行でテストが失敗したことを通知することです。

ただし、そのようなアサーションが失敗したときに壊れることができれば、便利な場合もあります。その行にブレークポイントを設定するだけで、テストケースが失敗しないこともできます。アサーションの失敗を破ることができれば、どのテストケースが失敗しているかをすぐに確認できます。

アサーションが失敗したときに、VSに一時的に中断するように指示するにはどうすればよいですか?

たとえば、単体テストで次のように多くのループがあり、どの反復が失敗しているかを知りたいです。

foreach(var testcase in testcases)
{
    Assert.AreEqual(testcase.ExpectedOutputData, FuncionUnderTest(testcase.InputData));
}
4

3 に答える 3

6

条件付きブレークポイントを使用して、アサーションのチェックの論理否定を指定するだけです。

個人的には、ブレークポイントは「この時点でのブレーク」ツールにすぎないため、真剣に活用されていないと思います。ブレークポイントは非常に用途がConsole.WriteLine広く、実際にコードを変更せずにデバッグ出力を表示する代わりに、また次の場合にのみブレークするために簡単に使用できます。アサーションは失敗します。

ただし、このように使いすぎると、パフォーマンスが少し低下する傾向がありますが、単体テストの実行で問題が発生することはめったにありません。

于 2013-01-08T09:57:11.573 に答える
4

単体テストをどのように構築しているかについてあまり知識がなくても、どのアサーションが単体テストの失敗の原因であるかを確認するのに苦労している場合は、個々のテストでテストしすぎているのではないでしょうか。ユニットテストは、この問題を正確に否定するために、可能な限りアトミックにする必要があります。テストを分割できれば、単一のテスト内に単一のアサーションを含めることさえできれば、どのテストが失敗しているかを判断するのがはるかに簡単になります。私は確かに、ブレークポイント固有のコードを単体テストに上書きすることを推奨します。

于 2013-01-08T10:07:53.797 に答える
2

nUnitを使用する場合は、これを使用して個別にデバッグできます。

[TestCase(0)]
[TestCase(1)]
public void NunitTestCases(int expected)
{
    Assert.AreEqual(expected,0);
}

私はあなたがいつでもこれを行うことができると思います:

[Test]
public void BreakTest()
{
    for (int i = 0; i < 2; i++)
    {
        bool condition = i == 0;
        if(!condition)
            Debugger.Break();
        Assert.IsTrue(condition);
    }
}
于 2013-01-08T10:04:51.247 に答える