本文介紹單元測試的概念,以及如何在 Visual Studio 中加入單元測試。
為什麼要寫單元測試
當專案越寫越大的時候,很容易遇到修改了 A 功能,卻導致 B 功能出錯的情形。這個狀況通常是未考慮到其它方法 (或這些方法的依賴性) 所導致的,多人合作時容易發生這樣的狀況。
如果建立單元測試的話,就能檢查在測試條件下,程式碼是否會出錯,這會帶來以下的好處:
- 可以避免修改 A 程式後導致 B 程式出錯的情形。
- 可以即時的驗證想法是否正確,不用等到上線測試。
- 單元測試相當於該方法的規格、使用說明書。
實作單元測試
- 在想要測試的方法上點右鍵,選擇「建立單元測試」。在 Visual Studio 2012 及以後版本,不能對非
public
方法建立單元測試。 - 在建立單元測試的視窗中,選擇是否要建立新專案測試或以既有專案測試,以及調整單元測試的格式等。
- 在建立的測試方法中,預設會包含需傳入的參數和傳出的結果,以及要測試的目標方法。
- 輸入要測試的參數,呼叫方法,並驗證結果是否與預期相同。
- 範例的單元測試程式碼如下:
[TestMethod()]
public void CheckEducationValidTest_NotPass1()
{
Education edu = new Education();
edu.IsFinish = true;
edu.FinishYear = null;
edu.Department = "資訊管理系";
edu.School = "國立中山大學";
Form1 form1 = new Form1();
Assert.AreEqual(form1.CheckEducationValid(edu), false);
}
在上方的方法中,建立了一個 Education
物件,並設定其 IsFinish
為 true
,FinishYear
為 null。由於聲明已經畢業,卻沒有輸入畢業年份,預期為回傳 False。其呼叫的原始方法如下,會檢查 School
, Department
屬性是否為空白,以及畢業年份是否有正確輸入:
public bool CheckEducationValid(Education edu)
{
if(edu.Department.Equals("") || edu.School.Equals(""))
{
return false;
}
if((edu.IsFinish && edu.FinishYear == null) || (edu.IsFinish == false && edu.FinishYear != null))
{
return false;
}
return true;
}
接著就可以在單元測試的程式碼上點選右鍵,選擇「執行測試」。測試的結果會放在「測試結果」視窗,可以檢查是否有通過測試,若沒有通過測試,可以再檢查是否原有程式邏輯有誤。