我有一個類(很多)有屬性。有些人有邏輯,有些則沒有。假設我想測試這些屬性,我該怎麼做呢?如何(策略)以BDD風格對單元測試屬性(get/set)進行測試?
最近,我對創建單元測試的BDD風格感興趣。
所以我會做一個上下文的設置 - 基本上創建SUT並加載任何需要的東西。 然後在每個Observation(測試方法)中,我會驗證某個特定屬性是否包含它應包含的內容。
這是我的問題。如果SUT有20個屬性,那麼我是否創建了20個觀測/測試?可能更多,如果其中一個屬性包含更多有趣的邏輯我猜。
[Observation]
public void should_load_FirstName()
{
Assert.Equals<string>("John", SUT.FirstName);
}
[Observation]
public void should_load_LastName()
{
Assert.Equals<string>("Doe", SUT.LastName);
}
[Observation]
public void should_load_FullName()
{
Assert.Equals<string>("John Doe", SUT.FullName);
}
但是,如果在單一觀察中彙總簡單的那個,會更好嗎?
[Observation]
public void should_load_properties()
{
Assert.Equals<string>("John", SUT.FirstName);
Assert.Equals<string>("Doe", SUT.LastName);
Assert.Equals<string>("John Doe", SUT.FullName);
}
或者如果我使用自定義屬性(可以多次應用於方法)會怎麼樣。所以,我可以做的可能,像:
[Observation(PropertyName="FirstName", PropertyValue="John")]
[Observation(PropertyName="LastName", PropertyValue="Doe")]
[Observation(PropertyName="FullName", PropertyValue="John Doe")]
public void should_load_properties()
{
}
感謝馬克的建議。回來的時候,你的CallContext博客文章幫了我很多! 我跟隨了Meszaros網站上Derived Values的鏈接並閱讀了它(在你的網站之後)。我不確定我會像實施逆向示例一樣去實現它的極限。我認爲在輸入旁邊有一個變量expectedResult,然後使用文字值。 在我上面的例子中,我聽到你 - 這並不明顯,但我從本地磁盤加載測試數據來創建SUT(這是一個驗收/交互測試)。我需要找到更好的方法來指定輸入值... – 2009-10-09 13:30:50