共用方式為


單元測試概觀

更新:2007 年 11 月

單元測試是以 Visual C#、Visual Basic 或 Visual C++ 撰寫而成的程式設計測試,並使用 /clr:safe 進行編譯。

注意事項:

如需如何將單元測試與 C++ 實際執行程式碼一起使用,以及如何使用以 C++ 撰寫之單元測試的詳細資訊,請參閱單元測試和 C++

單元測試可用來執行其他原始程式碼,方法是直接呼叫類別 (Class) 的方法,以傳遞適當的參數。如果您還加入 Assert 陳述式 (Statement),單元測試便可以測試產生的值是否與預期的值相符。單元測試方法位於測試類別中,該測試類別儲存於原始程式碼檔案內。

您可以使用程式碼產生功能 (可建立測試的初始原始程式碼) 來建立單元測試,也可以完全以手動方式撰寫測試。無論使用哪一種方式,測試類別和所有測試方法都是使用程式設計屬性 (Attribute) 來識別。

每個測試類別都使用 [TestClass()] 屬性加以標記。每個單元測試都是一個使用 [TestMethod()] 屬性標記過的測試方法。這些屬性會在產生單元測試時自動指派;當您手動撰寫單元測試,就必須自行加入類別和方法屬性。如需詳細資訊,請參閱單元測試的結構

產生單元測試

可以透過 Visual Studio 工具視窗中的對話方塊產生單元測試。每個單元測試都會建立為 C#、Visual Basic 或 Visual C++ 方法。它的程式碼和屬性會位於相同語言之測試專案的來源程式碼檔案中。新的測試會以您想測試的特定程式碼做為目標。您可以為個別方法產生單一單元測試、為所選的方法產生數個測試,或是為類別或命名空間中的所有方法產生數個測試。

您可以從目前專案中的原始程式碼產生單元測試,在無法取得原始程式碼時,您也可以從檔案系統中的組件 (Assembly) 產生單元測試。

最新產生之測試的程式碼會進行編譯,但是在它可提供有用的測試結果之前,必須先予以編輯。例如,您可以編輯它使其執行變數指派,並自訂 Assert 陳述式。產生的單元測試中含有 TODO 陳述式,會指出哪幾行程式碼必須進行編輯。

注意事項:

Team System 測試工具產生單元測試時,會使用一般命名慣例。舉例來說,測試檔案的檔名是將 "Test" 這個字連接在您測試之程式碼所在的檔案名稱之後,如 "Class1Test.cs"。測試類別和測試方法的名稱也是使用預設值產生。您可以在 [單元測試產生] 對話方塊中按一下 [設定],開啟 [測試產生組態] 對話方塊,在該對話方塊中變更這些預設值。

如需詳細資訊,請參閱 HOW TO:產生單元測試

撰寫單元測試

您不使用產生功能而手動撰寫單元測試。執行這項作業最好的方式是加入單元測試至測試專案;這麼做會建立不含程式碼、但套用了 [TestMethod()] 屬性的 Stub 測試。若要完成這個測試,接下來您必須在原始程式檔 (Source File) 中編輯測試,該檔案位於您方案的測試專案內。如需詳細資訊,請參閱 HOW TO:撰寫單元測試單元測試的結構

單元測試架構

「單元測試架構」提供許多額外的 Assert 類別和其他類別,讓您在撰寫單元測試時具有更大的彈性。如需詳細資訊,請參閱 Microsoft.VisualStudio.TestTools.UnitTesting 底下單元測試架構之命名空間和型別的相關文件。

測試類別繼承

測試類別是以 TestClass 屬性標記的測試方法。測試類別現在可以從其他測試類別繼承成員。這表示您可以在基底測試類別中建立可重複使用的測試;衍生的測試類別可以從基底測試類別繼承測試。這項功能不只能夠排除重複的測試程式碼,還能夠在進行實際執行程式碼單元測試時,為程式開發人員提供更大的彈性。

測試類別無法繼承自位於另一個組件中的類別。您可以透過下列方式來規避這項限制:

  1. 在原始程式碼檔中定義基底測試類別,並將該檔案加入至專案 A。

  2. 將同一個原始程式碼檔加入至另一個專案 Project B。若要執行這項動作,請在方案總管中,以滑鼠右鍵按一下專案,按一下 [加入],再按一下 [現有項目],然後使用 [加入現有項目] 對話方塊選取檔案。

  3. 雖然 Project B 會建置成不同的組件,但仍會包含基底測試類別。Project B 中的其他測試類別可以繼承自該基底測試類別。

繼承範例

您的實際執行程式碼有兩個實作 (Implementation):其中一個使用 Microsoft SQL Server 後端,另一個則使用 Oracle。這兩個實作都必須採用相同的運作方式。您可以建立一個名為 DBTestSuite、內含標準測試程式碼的抽象測試類別,接著再建立兩個衍生自 DBTestSuite 的類別,SQLTestSuite 和 OracleTestSuite。這些衍生類別 (Derived Class) 只需要實作抽象的 Connect 方法。接著,其中一個測試類別會連接到 Microsoft SQL Server,另一個則會連接到 Oracle。

此外,您還可以建立衍生自 SQLTestSuite 的 EmptySQLTestSuite 測試類別,以測試空白的 Microsoft SQL Server 資料庫。若要提高效能,您可以覆寫對於測試空白資料庫而言毫無意義的特定測試方法。

如果您使用測試類別繼承,[測試檢視] 視窗和 [測試清單編輯器] 會同時在基底類別 (Base Class) 和子類別中顯示測試方法。若要查看測試位於哪個類別,請顯示 [測試清單總管] 中的 [類別名稱] 或 [完整類別名稱] 資料行。如需詳細資訊,請參閱 HOW TO:自訂測試檢視

測試私用方法

利用單元測試,您不只能測試公用 (Public) 方法,還能測試私用 (Private) 方法。和公用方法一樣,當您從要測試的程式碼中產生測試時,就會自動建立私用方法的單元測試。如需詳細資訊,請參閱 HOW TO:測試私用方法使用私用存取子

單元測試的特殊類型

下表列出其他類型的單元測試:

單元測試類型

說明

資料驅動的單元測試

資料驅動測試是一種單元測試,您可以設定資料來源中的每個資料列重複呼叫該測試。每個資料列的資料都可以做為連續測試回合的輸入資料。如需詳細資訊,請參閱資料驅動的單元測試概觀

ASP.NET單元測試

ASP.NET 單元測試可用來在 ASP.NET 應用程式回應網頁要求時,於該應用程式中執行程式碼。ASP.NET 單元測試是於正在測試的 ASP.NET 應用程式中執行。如需詳細資訊,請參閱 ASP.NET 單元測試概觀

智慧型裝置單元測試

智慧型裝置單元測試是在智慧型裝置或模擬器上的智慧型裝置主機處理序底下執行的單元測試。如需詳細資訊,請參閱智慧型裝置單元測試的概觀

Web 服務單元測試

如需 Web 服務單元測試的詳細資訊,請參閱測試 Web 服務

請參閱

概念

單元測試的結構

單元測試和 C++

使用資料驅動的單元測試

其他資源

使用 ASP.NET 單元測試

使用智慧型裝置單元測試

管理測試

執行測試

分析測試結果