HOW TO:撰寫單元測試
更新:2007 年 11 月
有兩種原因您必須編輯單元測試:一是親手撰寫此測試時,一是編輯新產生的單元測試時。雖然您可以執行新產生的單元測試,但由於它建立時是採用預設內容,因此必須將這些內容初始化為適當的值,才能產生有意義的測試結果。在產生的單元測試中,您通常需要自訂變數指派以及一或多個 Assert 陳述式。
在單元測試中使用判斷提示陳述式
根據預設,每一個產生的單元測試會呼叫 Inconclusive 方法,此方法會因為測試未實作而導致測試失敗。下一個步驟是加入有意義的程式碼,以便檢查要測試的方法是否正確運作。執行此作業的一般方式是產生一個值,然後使用 Assert.AreEqual 陳述式與預期的值進行比較。如需範例,請參閱單元測試的結構中的<單元測試範例>。最新產生的單元測試會包含 "To-do" 註解,其中會建議要進行的變更。
不包含 Assert 陳述式的單元測試會自動通過,因為它不會逾時也不會擲回未預期的例外狀況。如需詳細資訊,請參閱基本測試結果和使用 Assert 類別。
開啟和撰寫單元測試
這個主題含有兩個程序:
第一個程序描述如何編輯現有的單元測試。通常需要這麼做的原因,是為了準備自動產生的單元測試。請參閱 HOW TO:產生單元測試。
第二個程序描述如何以手動方式建立及撰寫單元測試。
若要編輯現有的單元測試
在 [方案總管] 中的測試專案中,找出並開啟單元測試所在的檔案,然後找出想編輯的單元測試方法。
-或-
在 [測試檢視] 中按兩下單元測試。這麼做會開啟單元測試所在的檔案,並捲至單元測試方法的位置。
在方法中找出變數指派 (Variable Assignment)。
在新產生的測試中,變數指派會以 "To-Do" 陳述式標示出來,提醒您自訂此指派。例如,以下即為需要編輯的典型指派:
string target.owner = null; // TODO: Initialize to an appropriate value
指派適當的值給每個變數。
若想知道哪些是合適的值,請考量呼叫此方法之前這些變數可能初始化的值、方法被呼叫時可以發生的改變,以及您所預期的結果。如需此處理序的範例,請參閱逐步解說:建立和執行單元測試中的<執行和編輯單元測試>程序。
找出並編輯方法中的 Assert 陳述式。必要時,可以加入額外的 Assert 陳述式。
「單元測試架構」(Unit Testing Framework) 提供許多額外的 Assert 類別和方法,讓您在撰寫有用的 Assert 陳述式時有更大的彈性。如需詳細資訊,請參閱單元測試架構。
若要以自行輸入的方式建立單元測試
以滑鼠右鍵在 [方案總管] 中按一下測試專案,指向 [加入],再按 [新增測試]。
-或-
以滑鼠右鍵按一下 [測試檢視] 視窗的表面,再按一下 [新增測試]。
[加入新測試] 對話方塊隨即顯示。
在 [範本] 底下按一下 [單元測試],再按 [確定]。
此時您的測試專案中,便會加入名稱類似 UnitTest1.cs 的原始程式碼檔案,它所使用的語言和測試專案相同。這個檔案含有單元測試必要的許多項目:
它會參考 Microsoft.VisualStudio.TestTools.UnitTesting 命名空間 (Namespace) 和 System 命名空間。
它會定義自己的命名空間,其中含有一個測試類別。測試類別具有 [TestClass] 屬性 (Attribute)。
其中含有初始設定方法和清除方法。這些方法分別具有 [TestInitialize()] 和 [TestCleanup()] 屬性。
它含有一個空白測試方法,具有屬性 [TestMethod]。此處即為您加入測試邏輯之處。這個方法會有類似 TestMethod1() 的預設名稱。
這個檔案也會開啟在視窗中,以便編輯來源程式碼。新的 (空白) 測試方法會顯示在 [測試檢視] 視窗和測試清單編輯器中。
將測試程式碼加入至測試方法中。
「單元測試架構」(Unit Testing Framework) 提供許多額外的 Assert 類別和方法,讓您在撰寫有用的 Assert 陳述式時有更大的彈性。如需詳細資訊,請參閱單元測試概觀和單元測試架構。