2

Assert.AreEqual(object, object, string)カスタムメッセージとデフォルトメッセージを組み合わせたメッセージを指定する方法はありますか?

私は次のコードを持っています:

foreach (var testCase in testCases)
{
    Assert.AreEqual(testCase.Value, myObj.myMethod(testCase.Key), combinedMessage);
}

以下のVSユニットテストフレームワークからのメッセージ例に加えて、テストケースキーを指定したいと思います。

Assert.AreEqual failed. Expected:<True>. Actual:<False>.

おそらくのようなものFailed on the following test case: AB

4

2 に答える 2

5

オーバーロードはこれを自動的に行います。テストとして、このテストメソッドを作成して、出力がどうなるかを確認しました。

    [TestMethod]
    public void Test()
    {
        Assert.AreEqual(true, false, "Failed on the following test case: AB");
    }

エラーメッセージの出力は次のとおりです。Assert.AreEqual failed. Expected:<True>. Actual:<False>. Failed on the following test case: AB

メッセージ パラメータは、既定のメッセージに既に追加/結合されています。

あなたの場合、テストキーを取得したいだけの場合、テストは次のようになります。

foreach (var testCase in testCases)
{
    Assert.AreEqual(testCase.Value, myObj.myMethod(testCase.Key), 
        "Failed on the following test case: " + testCase.Key.ToString());
}

また、テスト ケースごとに独自のカスタム メッセージが必要な場合は、カスタム エラー メッセージを testCase クラスに移動するのが理にかなっています。各オブジェクトの作成の一環として、これら 3 つのプロパティを指定できます。

testCase.Value = true;
testCase.Key = "AB";
testCase.FailureMessage = "Failed on the following test case: AB";

このタイプの構造により、指定したメッセージを testCase のすべてのインスタンスに追加できます。そうすることで、単体テストは次のようになります。

foreach (var testCase in testCases)
{
    Assert.AreEqual(testCase.Value, myObj.myMethod(testCase.Key), 
        testCase.FailureMessage));
}

例の出力は次のようになります。Assert.AreEqual failed. Expected:<True>. Actual:<False>. Failed on the following test case: AB

于 2013-03-05T21:37:19.183 に答える
1

メッセージを連結していただけませんか?

foreach (var testCase in testCases)
{
    string message = string.Format("{0}: {1}", defaultMessage, testCase.Key);
    Assert.AreEqual(testCase.Value, myObj.myMethod(testCase.Key), message );
}
于 2013-03-05T17:07:43.797 に答える