共用方式為


快速入門:搭配測試總管進行以測試為導向的開發工作

我們建議您建立單元測試可協助您透過許多步驟加入開發,繼續執行程式碼正確工作。 您可以使用撰寫單元測試的數種架構,包含由協力廠商所開發的陣列。 某些測試架構專門以不同的語言或平台為測試。 測試總管在任何這些框架中對單元測試提供一個介面。 配接器隊最常用的框架是可用的,然後您可以將其他框架撰寫配接器。

測試總管取代 Visual Studio 的舊版中的單元測試視窗。 它的優點包括:

  • 使用單一介面執行 .NET,未處理,資料庫和其他測試類型。

  • 使用您的選項,例如 NUnit 或框架 MSTest 單元測試架構。

  • 請參閱在一個視窗中通常需要的所有資訊。 詳細資訊可以在 [屬性] 視窗中找到。

使用測試總管

顯示 [全部執行] 按鈕的 [單元測試總管]

您可以使用測試總管,執行單元測試

  1. 建立使用您選擇的測試架構的單元測試。

    例如,使用 MSTest Framework 的測試:

    1. 建立測試專案

      在[ 新增專案] 對話方塊中, 展開 [Visual Basic]、[ Visual C#] ,或是[ Visual C++], 接著選取[測試]。

      選取 [單元測試專案]。

    2. 將每個單元測試做為方法。 在每個測試方法的前面加上 [TestMethod] 屬性。

  2. 在功能表列上,選取 [測試], [執行單元測試], [所有測試]。

    方案建置和執行測試。

    測試總管開啟並顯示測試結果。

若要檢視測試完整清單: 選取任何分類的 [全部顯示] 。

若要回到摘要,請選取 [首頁] 檢視。

若要檢視測試結果的詳細資料: 選取測試總管中的測試。 詳細資料,例如例外狀況訊息會出現在詳細資料窗格中。 您也可以在 [屬性] 視窗中看到詳細資訊。

巡覽至測試的程式碼: 按兩下測試總管的測試或從捷徑功能表中選擇 [開啟測試] 。

偵錯測試: 開啟一個或多個測試的捷徑功能表,然後選取 [偵測選取的測試]。

重要

顯示的結果是最近執行的結果。色彩的結果列顯示正在執行的測試結果。例如,如果您執行許多測試,但是某些失敗,然後只執行成功的測試,然後結果列所有會顯示綠色。

注意事項注意事項

如果測試未出現,請確定已安裝配接器去連接測試總管至您使用的測試架構。如需詳細資訊,請參閱 使用與測試總管中不同的測試架構。

逐步解說:使用開發的單元測試方法。

使用 Microsoft 單元測試架構,本逐步解說示範如何在 C# 開發一個要測試的方法。 您可以輕鬆地讓它與其他語言的和使用其他測試架構,例如 NUnit。 如需詳細資訊,請參閱 使用不同的測試架構。

建立測試和方法。

  1. 建立一個Visual C# 類別庫專案。 這個專案將會包含您想要提供的程式碼。 在此範例中,它的名稱是 MyMath。

  2. 建立測試專案

    • 在 [新增專案] 對話方塊中,選取 [Visual C#][測試] ,然後選取 [單元測試專案]。

      新程式碼和測試專案

  3. 撰寫基本測試方法。 驗證特定輸入的結果:

      [TestMethod]
      public void BasicRooterTest()
      {
        // Create an instance to test:
        Rooter rooter = new Rooter();
        // Define a test input and output value:
        double expectedResult = 2.0;
        double input = expectedResult * expectedResult;
        // Run the method under test:
        double actualResult = rooter.SquareRoot(input);
        // Verify the result:
        Assert.AreEqual(expectedResult, actualResult,
            delta: expectedResult / 100);
      }
    
  4. 產生要測試的方法。

    1. 將游標置於 Rooter,然後在捷徑功能表中選擇[產生], [新增型別]。

    2. 在 [新增型別] 對話方塊中,將 [專案] 設至類別庫專案。 在這個範例中,它是設定為 MyMath。

    3. 將游標置於 SquareRoot,然後在捷徑功能表中選擇[產生], [新增型別]。

  5. 執行單元測試

    • 在功能表列上,選取 [測試], [執行單元測試], [所有測試]。

      建置並執行方案。

      測試總管會開啟並顯示測試結果。

      測試隨即出現在 [失敗的測試] 之下:

  6. 選取測試的名稱。

    測試的詳細資料會顯示在測試總管下半部。

  7. 選取項目在 [堆疊追蹤] 底下去看這個測試失敗的位置。

顯示失敗之測試的 [單元測試總管]。

此時,您會建立您要修改的測試和 Stub,讓測試成功。

在每次變更,讓所有的測試都通過以後

  1. 在 MyMath \ Rooter.cs,改善SquareRoot的程式碼:

     public double SquareRoot(double input)
      {
        return input / 2;
      }
    
  2. 在[測試總管] 中,選取 [全部執行]。

    程式碼組建和測試。

    測試就會成功。

    顯示成功之測試的 [單元測試總管]。

將測試擴充輸入的範圍

  1. 改善在所有情況下您程式碼的工作,或者嘗試各種輸入值的信賴等級。

    提示

    避免改變已經存在的成功測試。相反地,請加入新的測試。只有在使用者的需求改變時,將現有的測試改變。這個原則可協助您確保不會中斷現有的功能,並且在工作擴充程式碼。

    在測試類別中,加入下列測試,嘗試輸入值的範圍:

      [TestMethod]
      public void RooterValueRange()
      {
        // Create an instance to test:
        Rooter rooter = new Rooter();
        // Try a range of values:
        for (double expectedResult = 1e-8;
            expectedResult < 1e+8;
            expectedResult = expectedResult * 3.2)
        {
          RooterOneValue(rooter, expectedResult);
        }
      }
    
      private void RooterOneValue(Rooter rooter, double expectedResult)
      {
        double input = expectedResult * expectedResult;
        double actualResult = rooter.SquareRoot(input);
        Assert.AreEqual(expectedResult, actualResult,
            delta: expectedResult / 1000);
      }
    
  2. 在[測試總管] 中,選取 [全部執行]。

    新的測試失敗,不過,第一個測試仍然可以成功。

    若要找出問題的失敗,請選取失敗的測試,並在測試總管下半部,選取 [堆疊追蹤] 的最上層項目。

  3. 檢查待測方法看看可能是錯誤的東西。 在 MyMath.Rooter 類別,請重寫程式碼:

      public double SquareRoot(double input)
      {
        double result = input;
        double previousResult = -input;
        while (Math.Abs(previousResult - result) > result / 1000)
        {
          previousResult = result;
          result = result - (result * result - input) / (2 * result);
        }
        return result;
      }
    
  4. 在[測試總管] 中,選取 [全部執行]。

    兩個測試都成功。

為例外狀況加入測試

  1. 為負面輸入加入測試:

           [TestMethod]
            public void RooterTestNegativeInputx()
            {
                Rooter rooter = new Rooter();
                try
                {
                    rooter.SquareRoot(-10);
                }
                catch (ArgumentOutOfRangeException e)
                {
                    return;
                }
                Assert.Fail();
            }
    
  2. 在[測試總管] 中,選取 [全部執行]。

    測試回路底下的方法,必須手動移除。

  3. 選擇 [取消]。

    測試停止在 10 秒鐘之後。

  4. 內建方法程式碼:

      public double SquareRoot(double input)
      {
        if (input <= 0.0) 
        {
          throw new ArgumentOutOfRangeException();
        } 
      ...
    
  5. 在[測試總管] 中,選取 [全部執行]。

    所有測試都成功。

重構,且不會變更測試。

  1. 簡化程式碼,但是,請不要變更測試。

    提示

    重構 是要讓程式碼更好執行或讓程式碼更容易了解的變更。不要變更程式碼的行為,也未變更測試。

    建議您分別執行重構步驟與擴充功能的步驟。將測試保持未變更,當重構時為您確定您沒有不小心引入 Bug。

      public class Rooter
      {
        public double SquareRoot(double input)
        {
          if (input <= 0.0) 
          {
            throw new ArgumentOutOfRangeException();
          }
          double result = input;
          double previousResult = -input;
          while (Math.Abs(previousResult - result) > result / 1000)
          {
            previousResult = result;
            result = (result + input / result) / 2;
            //was: result = result - (result * result - input) / (2*result);
          }
          return result;
        }
      }
    
  2. 選擇 [全部執行]。

    所有測試仍然可以成功。

    顯示 3 個成功測試的 [單元測試總管]。