2011-03-30 20 views
7

先前使用過MbUnit後,我們將MSpec用於單元測試。如何使用MSpec中的It斷言輸出消息

我習慣能夠說

Assert.IsTrue(status, "Status should be true"); 
在MbUnit的

,即增加一個消息給處於輸出如果失敗的斷言。

我在MSpec中找不到任何相應的功能。我正在測試一些XML驗證,如果失敗,我想報告驗證錯誤消息。所以我MSpec的代碼看起來像

string message; 

bool isValid = ValidateXml(myXml, out message); 

isValid.ShouldBeTrue(); 

但我希望能夠給message添加到測試輸出,如果ShouldBeTrue()失敗。

這可能嗎?

回答

6

尋找MSpec的來源,沒有。擴展方法不會爲消息帶上字符串參數。

您可以根據要編寫的代碼自行添加功能;代碼在machine.specifications/Source/Machine.Specifications/ExtensionMethods.cs。我不知道建設有多難。

例如,你可以創建ShouldBeFalse過載和ShouldBeTrue像這樣:

[AssertionMethod] 
public static void ShouldBeFalse([AssertionCondition(AssertionConditionType.IS_FALSE)] this bool condition, string message) 
{ 
    if (condition) 
    throw new SpecificationException(message); 
} 

[AssertionMethod] 
public static void ShouldBeTrue([AssertionCondition(AssertionConditionType.IS_TRUE)] this bool condition, string message) 
{ 
    if (!condition) 
    throw new SpecificationException(message); 
} 
+0

啊我明白了。謝謝你,我用這段代碼編寫了一個新的擴展方法,它引發一個帶有自定義消息的'SpecificationException'。如果你想添加一些關於你的答案,我會將其標記爲已接受。 – 2011-03-30 11:35:21

1

有目前這種沒有基礎設施,但像馬特我會建議對MSpec的基礎上實現自己的「報告」主張內置斷言庫(可能在<Product>.ForTesting類庫中)。

在所有其他情況下,It字段告訴應該觀察什麼,因此缺少消息參數。

相關問題