我正在學習單元測試的最佳實踐(特別感謝這篇文章:What makes good unit-test?),因爲在我的項目中,我們開始以無秩序的方式進行單元測試。所以現在我必須從一開始就採用幾乎所有的測試方法。我是否必須進行沒有特定功能的單元測試類?
引用帖子沒有回答的一個問題是,我是否必須測試所有類,即使是沒有特定功能的類?
編輯:「沒有功能」我的意思是一個沒有公共方法的類。例如,只有2個自動實現的名稱和姓氏屬性的Person類。
我正在學習單元測試的最佳實踐(特別感謝這篇文章:What makes good unit-test?),因爲在我的項目中,我們開始以無秩序的方式進行單元測試。所以現在我必須從一開始就採用幾乎所有的測試方法。我是否必須進行沒有特定功能的單元測試類?
引用帖子沒有回答的一個問題是,我是否必須測試所有類,即使是沒有特定功能的類?
編輯:「沒有功能」我的意思是一個沒有公共方法的類。例如,只有2個自動實現的名稱和姓氏屬性的Person類。
沒有功能的類的例子是類似於域對象的東西嗎?
public class DomainObjectFoo
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime DateCreated { get; set; }
}
如果您的所有類都包含自動實現的屬性,字段等,那麼確實沒有任何要測試的東西。但是,這個時候,你添加了一些像
public override string ToString()
{
return Name;
}
那麼它值得單元測試。在這種情況下單元測試可能很簡單,但沒關係。它將描述ToString應該返回的內容(在這種情況下,Name)。您甚至可以爲此方法編寫邊界案例:如果Name爲空,該怎麼辦?如果名稱爲空,該怎麼辦?一般來說,.NET的東西(比如自動實現的屬性)不需要單元測試,以確保getter和setter的工作。然而,即使是最簡單的功能(在這個例子中,ToString())也應該被測試。
這與我正在考慮進行單元測試的情況完全吻合。 – Ucodia 2009-10-01 13:52:35
可以說,你不應該有沒有特定功能的類(見single responsibility rule),但答案是肯定的。理想情況下,您應該在您編寫的任何課程上單元測試全部公共方法/屬性。
理想:
我從Kent Beck TDD book得到了這個過程。
任何類別都應該測試。測試自動化是減少軟件缺陷的人爲因素的唯一途徑。這可以通過簡單的測試(分而治之;)和優秀的軟件設計來實現。
如果你的類實現了幾個任務,然後拆分它。如果它實現了一個任務的情況,但其中一些任務非常龐大,那麼將一些代碼移到底層類中,這些類將在需要時調用。但是不要執行那些設計不好的東西,因爲這意味着它沒有正確定義 - 這導致分析不佳。
就你而言,我不知道是否值得測試公共自動生成的屬性。但是,如果您期望得到非空值,您應該考慮。
例如:
public IList<Thing> Things {get; set;}
如果你設置之前得到這個屬性,你會得到一個空,也許你希望(我經常這樣做)與零個元素的列表。
問候!
那就是那種讓我懷疑測試與否的情況。 我會混淆那裏的所有想法,那就是要做到這一點。謝謝大家 ! – Ucodia 2009-10-01 20:16:15
我打賭你的課程確實有功能。例如,我敢打賭,如果構造函數通過不正確的輸入,它應該拋出一個異常。另外,我敢打賭,你們大概可以相互比較一下,並且如果它們都封裝相同的值,那麼期望它們是平等的。
如果它確實沒有任何功能,並且在概念上更像是一個結構,那麼我看不到任何實際測試的需要。
你能詳細說明你的「沒有特定功能的類」是什麼嗎?只要它們包含代碼,我會假定它們具有特定的功能...... – 2009-10-01 11:27:54
事實上,「S. DePouw」指出的正是我考慮進行單元測試的那種情況。 某些類只包含自動實現的屬性,這意味着沒有特定的功能。 – Ucodia 2009-10-01 13:55:46