HOW TO:建立並執行單元測試

單元測試提供開發人員及測試人員一個快速的方法,來檢查 C#、Visual Basic .NET 及 C++ 專案中類別的方法中的邏輯錯誤。 單元測試只要建立一次,就可以在每一次原始程式碼變更時執行,確保沒有 Bug 出現。

本主題涵蓋如何使用 Microsoft Visual Studio 2010 單元測試工具自動產生現有程式碼的單元測試基本架構、加入驗證以填入該基本架構、建立測試分類、建立測試清單、執行測試,以及讀取程式碼涵蓋範圍結果。

如需單元測試的各部分說明,請參閱單元測試的結構

單元測試範例

此範例是以逐步解說:建立和執行單元測試主題為基礎。

下圖顯示 [建立單元測試] 對話方塊。 您以滑鼠右鍵按一下包含方法的程式碼檔,然後按一下 [建立單元測試],該對話方塊就會出現。 單元測試會針對您在對話方塊的 [類型] 清單中選取的所有方法產生。

下圖顯示,此範例將針對 Credit 和 Debit 方法產生單元測試。

[建立單元測試] 對話方塊

產生單元測試之後,會建立程式碼檔並且在您的方案總管中顯示變更。

下圖顯示建立單元測試的結果。

圖案狀態需要的標題擁有者

  1. 針對您在 [建立單元測試] 對話方塊中選取的每一個方法會建立個別的單元測試。 在此範例中,將針對 Credit 和 Debit 方法產生單元測試。

  2. 每一個產生的單元測試都有空的變數和預留位置 Assert 陳述式。 預設的預留位置 Assert 陳述式通常是 Assert.Inconclusive 陳述式。

  3. 若要讓測試有意義,您必須初始化變數並以適當的 Assert 陳述式取代預留位置。 在此範例中,Credit 單元測試會保留產生時的原狀,Debit 測試方法中的變數則會初始化,Assert 陳述式也會加以取代。

  4. 當您初次產生單元測試時,方案中會建立測試專案。

  5. 測試專案中會針對您要測試的每一個類別建立個別的單元測試檔。 在此範例中,要測試的這兩個方法屬於同一類別。 因此,只會有一個單元測試檔 BankAccountTest.cs。

  6. 執行測試之後,結果會出現在 [測試結果] 視窗中。

建立單元測試

建立單元測試分成兩個階段。

第一個階段是產生單元測試檔,其中包含您要測試的程式碼中每一個方法的測試方法基本架構版本。 每一個基本架構測試方法,都是使用空變數和預留位置 Assert 陳述式所產生的。

第二個階段是初始化變數,並以適當的陳述式取代預留位置 Assert 陳述式。

為單元測試產生基本架構

使用 [建立單元測試] 對話方塊針對您要測試的程式碼中任何或所有方法產生單元測試。

注意事項注意事項

雖然以屬性 (例如 private、internal 和 friend) 標記的方法通常不會在這些方法的類別外顯示,但是 Microsoft Visual Studio 2010 工具允許單元測試存取這些方法。 如需這個作法的詳細資訊,請參閱 Private、Internal 和 Friend 方法的單元測試

若要為單元測試產生基本架構

  1. 在 [Visual Studio 程式碼編輯器] 視窗中開啟您要測試的程式碼。

  2. (僅適用 ASP.NET 服務) 如果您要測試 ASP.NET Web 服務,務必確定專案包含 .aspx 網頁。 如果您在未包含 .aspx 網頁的專案中為 Web 服務建立單元測試,在嘗試執行測試時將會收到錯誤。 如需詳細資訊,請參閱 ASP.NET Web 服務的單元測試

  3. 以滑鼠右鍵按一下要測試的命名空間、類別或方法,然後按一下 [建立單元測試]。

  4. 在 [建立單元測試] 對話方塊中,選取要加入至單元測試檔之所有方法的核取方塊。

  5. (選擇性) 按一下 [設定],變更您要建立之單元測試的預設設定。 這些是 Visual Studio 設定,並且會套用至您建立的任何單元測試,直到您再次變更設定為止。

    • 命名設定:這些選項可讓您在產生單元測試時,自訂測試檔案、測試類別和測試方法的命名方式。

    • 預設將所有測試結果標示為結果不明:選取此核取方塊為每一個測試方法提供 Assert.Inconclusive() 陳述式做為預留位置 Assert。 清除此核取方塊則會消除預留位置 Assert。

    • 啟用文件註解:選取此核取方塊為每一個測試方法提供預留位置註解。 清除此核取方塊則會消除預留位置註解。

    • 允許 InternalsVisibleTo 屬性:選取此核取方塊可將標記為 Friend 或 Internal 的方法視為公用方法 (建議使用)。 清除此核取方塊則會使用私用存取子測試這些方法。 如需私用存取子的詳細資訊,請參閱 Private、Internal 和 Friend 方法的單元測試

  6. (選擇性) 若要針對組件中沒有原始程式碼的方法加入測試,請按一下 [加入組件]。 如需詳細資訊,請參閱 HOW TO:在不使用原始程式碼的情況下建立單元測試

  7. 在 [輸出專案] 方塊中,執行下列其中一項:

    • 若要建立新的測試專案,請選取新專案的語言,然後按一下 [確定]。 [新增測試專案] 對話方塊隨即出現。 您可以為專案命名,或是接受預設名稱,然後按一下 [建立]。

    • 若要將 [建立單元測試] 對話方塊中選取的方法附加到現有測試專案中的單元測試檔,請選取下拉式清單中的專案,然後按一下 [確定]。

將驗證加入至單元測試

單元測試檔中產生的每一個測試方法都包含空的變數和預留位置 Assert 陳述式。 您可以執行這類測試,但由於其中沒有實際的資料,因此您看不出方法是否依預期執行。 若要讓測試有意義,您必須將變數初始化,並且以適用於該方法的陳述式 (通常是 Assert.AreEqual 陳述式) 取代預留位置 Assert 陳述式。

若要將驗證加入至單元測試

  1. 開啟單元測試檔案,然後找出您要將其變數初始化的單元測試。

  2. 找出單元測試中的變數指派。

    在新產生的測試中,變數指派會以 "TODO" 陳述式標示出來,提醒您自訂指派。 例如,以下即為需要編輯的典型指派:

    string target.owner = null; // TODO: Initialize to an appropriate value

  3. 指派適當的值給每個變數。 如需指派適當變數的範例,請參閱逐步解說:建立和執行單元測試中的<執行和編輯單元測試>程序。

    注意事項注意事項

    您可以建立資料導向的單元測試,使用各種不同的值執行單元測試。 資料驅動的單元測試,是針對資料來源中的每一資料列重複執行的單元測試。 如需詳細資訊,請參閱HOW TO:建立資料驅動型單元測試

  4. 找出並編輯單元測試中的 Assert 陳述式。 如需可用的 Assert 陳述式的詳細資訊,請參閱使用 Assert 類別

  5. (選擇性) 使用 Microsoft.VisualStudio.TestTools.UnitTesting 命名空間的 [TestInitialize()] 和 [TestCleanup()] 方法,為您的單元測試新增安裝和清除程式碼。 當您產生單元測試時,「其他測試屬性」區段會新增至您的單元測試檔案中。 展開這個區段可以顯示加了註解的方法,可用來包含初始化和清除。

(選擇性) 建立測試分類

您可以使用測試分類將自動化測試分類管理。 如需詳細資訊,請參閱定義測試分類以分組測試

注意事項注意事項

建議您使用測試分類而非測試清單。 測試分類可讓您根據指派的分類執行測試群組,而不需要維護測試清單。

若要建立新的測試分類

  1. 開啟 [測試檢視] 視窗。

  2. 選取測試。

  3. 在屬性窗格中,按一下 [測試分類],然後按一下最右邊資料行中的省略符號 (...)。

  4. 在 [測試分類] 視窗的 [加入新分類] 方塊中,輸入新測試分類的名稱。

  5. 按一下 [加入],然後按一下 [確定]。

    新的測試分類將指派給您的測試,並且可供其他測試透過其屬性來使用。

(選擇性) 建立測試清單

測試清單是以邏輯群組收及單元測試的方式。 將單元測試加入至測試清單的主要優點在於,您可以從多個單元測試檔執行測試、將單元測試當做組建的一部分執行,以及使用清單強制簽入原則。 如需測試清單的詳細資訊,請參閱定義測試清單以分組測試

注意事項注意事項

建議您使用測試分類而非測試清單。 測試分類可讓您根據指派的分類執行測試群組,而不需要維護測試清單。

若要建立測試專案

  1. 在 [測試] 功能表上按一下 [建立新測試清單]。

  2. 在 [建立新測試清單] 對話方塊中輸入清單的名稱,加入說明,選取要放置測試清單的位置,然後按一下 [確定]。

  3. 若要顯示可用的測試,請在 [測試清單編輯器] 視窗中按一下 [所有載入的測試]。

  4. 從主視窗將您要加入的每一個單元測試拖曳到測試清單中。

執行單元測試

在建立單元測試之後,您可以隨時執行測試。 此程序僅提供一種執行單元測試的方式,如需其他方法的詳細資訊,例如使用鍵盤快速鍵或命令列,請參閱 HOW TO:從 Microsoft Visual Studio 執行自動化測試

若要執行單元測試

  1. 指向 [測試] 功能表上的 [視窗],然後按一下 [測試檢視]。

  2. (選擇性) 如果您要收集程式碼涵蓋範圍的資訊,請執行下列動作:

    1. 在 [測試] 功能表上指向 [編輯測試設定],然後按一下目前測試回合的測試設定。

    2. 在 [測試設定] 對話方塊中,按一下 [資料和診斷]。

    3. 在 [角色] 底下選取您想要用來執行測試的角色:

    4. 核取 [程式碼涵蓋範圍],然後按一下 [設定]。

    5. 選取核取方塊,即可選取要收集其程式碼涵蓋範圍資訊的項目。

    6. 在 [程式碼涵蓋範圍詳細資料] 對話方塊中,按一下 [確定]。

    7. 在 [測試設定] 對話方塊中,按一下 [套用],然後按一下 [關閉]。

  3. 在 [測試檢視] 視窗中,選取一項或多項測試。 若要選取多項測試,請按住 CTRL 鍵同時按一下各項測試。

  4. 按一下 [測試檢視] 視窗工具列上的 [執行選取範圍] 按鈕。 測試將會執行,且 [測試結果] 視窗會開啟。

  5. (選擇性) 若要查看測試的詳細資料,請以滑鼠右鍵按一下 [測試結果] 視窗中的測試,然後按一下 [檢視測試結果詳細資料]。

  6. (選擇性) 若要找出單元測試檔中包含錯誤的區域,請在詳細資料視窗的 [錯誤堆疊追蹤] 下方按一下錯誤的連結。

如需了解測試結果的詳細資訊,請參閱檢閱測試結果

(選擇性) 檢視程式碼涵蓋範圍

如果您選擇要收集程式碼涵蓋範圍資訊,可以開啟 [程式碼涵蓋範圍] 視窗,查看單元測試中涵蓋所測試程式碼之方法的比例。 如需如何檢查已執行測試的程式碼涵蓋範圍的詳細資訊,以及如何管理程式碼涵蓋範圍結果的詳細資訊,請參閱程式碼涵蓋範圍資料概觀

若要檢視單元測試的程式碼涵蓋範圍

  1. 在 [測試結果] 視窗的工具列上,按一下 [顯示程式碼涵蓋範圍結果]。 您可能需要放大視窗才能看見按鈕。

  2. [程式碼涵蓋範圍結果] 視窗隨即開啟。

    此視窗會顯示方法的測試範圍。

請參閱

工作

HOW TO:使用負載測試編輯器將 Web 效能測試、單元測試和自動程式碼 UI 測試加入至負載測試情節

HOW TO:使用負載測試編輯器從負載測試情節中移除 Web 效能測試、單元測試和自動程式碼 UI 測試

概念

單元測試的結構

單元測試和 C++

泛型方法的單元測試

ASP.NET Web 服務的單元測試