2013-03-05 156 views
1

是否有一種方法來指定消息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

+0

廣東話您連接2個字符串? – Blachshma 2013-03-05 17:07:37

+0

Assert.AreEqual失敗不是靜態的。我想使用框架中出現的任何內容。 – 2013-03-05 17:11:24

回答

3

重載將自動爲您完成此操作。作爲測試我在此測試方法來看到的輸出將是什麼:

[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類。作爲創建每個對象的一部分可以接着指定這些三個屬性:

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

這種類型的結構將允許具有要追加用於測試用例的每個實例指定消息。這樣做將使單元測試看起來像這樣:

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

+0

這對我來說非常合適。謝謝。 – 2013-03-05 21:48:06

0

難道你不只是連接信息?

foreach (var testCase in testCases) 
{ 
    string message = string.Format("{0}: {1}", defaultMessage, testCase.Key); 
    Assert.AreEqual(testCase.Value, myObj.myMethod(testCase.Key), message); 
} 
+0

我寧願不硬編碼默認消息,特別是它可能隨測試用例而改變。 – 2013-03-05 17:11:53