共用方式為


使用 IntelliTest 來為模糊測試產生單元測試

IntelliTest 會探索您的 .NET 程式碼,以產生測試資料和一套單元測試。 對於程式碼中的每個陳述式,都會產生一個測試輸入來執行該陳述式。 會針對程式碼中的每個條件式分支執行案例分析。 例如,if 陳述式、斷言,以及所有可以擲回例外狀況的作業都會被分析。 此分析可用來產生每個方法參數化單元測試的測試資料,以建立具有高程式碼涵蓋範圍的單元測試。 將其視為智慧模糊測試,將輸入和測試案例縮減為執行所有邏輯分支並檢查異常的情況。

當您執行 IntelliTest 時,您可以輕鬆查看哪些測試失敗,並新增任何必要的程式碼來修正它們。 您可以選擇要將哪些生成的測試儲存到測試專案中,以構建回歸測試套件。 當您變更程式碼時,請重新執行 IntelliTest,讓產生的測試與程式碼變更保持同步。

備註

IntelliTest 已在 Visual Studio 2026 中被取代。 在 Visual Studio 2022 中,IntelliTest 僅支援 .NET Framework,且僅限於 Visual Studio Enterprise。 對 .NET 6 的支援僅限於預覽版。

備註

在 Visual Studio 2022 中,IntelliTest 僅支援 .NET Framework,且僅限於 Visual Studio Enterprise。 對 .NET 6 的支援僅限於預覽版。

可用性和擴展

建立 IntelliTest執行 IntelliTest 功能表命令

  • 僅適用於 Visual Studio 企業版。

  • 僅支援以 .NET Framework 為目標的 C# 程式碼。

  • 延伸 ,並支援以 MSTest、MSTest V2、NUnit 和 xUnit 格式發出測試。

  • 不支援 x64 設定 (需要預覽版)。

探索:使用 IntelliTest 探索您的程式碼並產生單元測試

若要產生單元測試,您的類型必須是公用的。

  1. 在 Visual Studio 中開啟您的解決方案,然後開啟具有您要測試方法的類別檔案。

  2. 以滑鼠右鍵按一下方法,然後選擇 [執行 IntelliTest ] ,以產生方法中程式碼的單元測試。

    右鍵單擊生成單元測試的方法的屏幕截圖。

    IntelliTest 會使用不同的輸入多次執行您的程式碼。 每個執行都會在表格中表示,其中顯示輸入測試資料和產生的輸出或例外狀況。

    「探索結果」視窗的螢幕擷取畫面。

若要產生類別中所有公用方法的單元測試,只要在類別中按一下滑鼠右鍵,而不是特定方法,然後選擇 [執行 IntelliTest]。 使用「 探索結果」 視窗中的下拉清單,以顯示類別中每一個方法的單元測試及輸入資料。

要從列表中查看的測試結果的屏幕截圖。

對於通過的測試,請檢查結果欄中報告的結果是否符合您對程式碼的期望。 對於失敗的測試,請視需要修正程式碼。 然後重新執行 IntelliTest 以驗證修正。

Persist:將單元測試儲存為迴歸套件

  1. 選取您要將參數化單元測試儲存到測試專案的資料列。

    儲存測試結果的螢幕擷取畫面。

    您可以檢視已建立的測試專案和參數化單元測試 - 對應於每個列的個別單元測試會儲存在測試專案的 .g.cs 檔案中,而參數化單元測試會儲存在其對應 的.cs 檔案中。 您可以執行單元測試,並檢視測試總管的結果,就像您手動建立的任何單元測試一樣。

    方案總管中已儲存測試的螢幕擷取畫面。

    任何必要的參考也會新增至測試專案。

    如果方法程式碼變更,請重新執行 IntelliTest,讓單元測試與變更保持同步。

協助:使用 IntelliTest 來聚焦程式碼探勘

  1. 如果您有更複雜的程式碼,IntelliTest 會協助您專注於程式碼探索。 例如,如果您有將介面作為參數的方法,而且有多個類別實作該介面,IntelliTest 會探索這些類別並報告警告。

    查看警告以決定您要執行的動作。

    檢視警告的螢幕擷取畫面。

  2. 調查程式碼並瞭解您要測試的內容之後,您可以修正警告,以選擇要用來測試介面的類別。

    修復警告的屏幕截圖。

    此選擇會新增至 PexAssemblyInfo.cs 檔案中。

    [assembly: PexUseType(typeof(Camera))]

  3. 現在,您可以重新執行 IntelliTest,以產生參數化單元測試,並僅使用您修正的類別來測試資料。

    修復後重新運行 IntelliTest 的屏幕截圖。

指定:使用 IntelliTest 來驗證您在程式碼中指定的正確性屬性

指定您希望產生的單元測試驗證的輸入和輸出之間的一般關係。 該規範封裝在一種看起來像測試方法但被普遍量化的方法中。 這是參數化單元測試方法,您所做的任何斷言必須對 IntelliTest 可以產生的所有可能輸入值成立。

問與答

問:您可以將 IntelliTest 用於非受控程式碼嗎?

A: 否,IntelliTest 僅適用於受控代碼。

問:生成的測試何時通過或失敗?

A: 如果沒有發生任何例外,就會像其他的單元測試一樣通過。 如果任何斷言失敗,或測試中的程式碼拋出未處理的例外狀況,則會失敗。

如果您有在擲回某些例外狀況時可以通過的測試,您可以根據測試方法、測試類別或組件層級的需求設定下列其中一個屬性:

  • PexAllowedException屬性

  • PexAllowedExceptionFromType屬性

  • PexAllowedExceptionFromTypeUnderTestAttribute

  • PexAllowedExceptionFromAssemblyAttribute

問:我可以在參數化單元測試中新增假設嗎?

A: 是的,使用假設來指定某一特定方法的單元測試哪些測試數據是不需要的。 使用類別 PexAssume 來新增假設。 例如,您可以新增變數不是空值的 lengths 假設,如下所示:

PexAssume.IsNotNull(lengths);

如果您新增假設並重新執行 IntelliTest,則會移除不再相關的測試資料。

問:我可以將斷言新增至參數化單元測試嗎?

答: 是,IntelliTest 會在執行單元測試時檢查您在斷言中所陳述的內容是否實際正確。 使用 PexAssert 類別或測試架構附帶的斷言 API 來新增斷言。 例如,您可以新增兩個變數相等的斷言。

PexAssert.AreEqual(a, b);

如果您新增判斷提示並重新執行 IntelliTest,它會檢查您的判斷提示是否有效,如果無效,測試會失敗。

問:我可以在不先執行 IntelliTest 的情況下產生參數化單元測試嗎?

一個: 是,在類別或方法中按一下滑鼠右鍵,然後選擇 [ 建立 IntelliTest]。

建立 IntelliTest 的螢幕擷取畫面。

接受預設格式來產生測試,或變更專案和測試的命名方式。 您可以建立新的測試專案,或將測試儲存至現有專案。

使用 MSTest 預設值建立 IntelliTest 的螢幕擷取畫面。

問:我可以將其他單元測試框架與 IntelliTest 搭配使用嗎?

A: 是的,請按照以下步驟尋找並安裝其他框架。 Visual Studio Marketplace 中也提供測試架構延伸模組,例如 NUnit 測試產生器

重新啟動 Visual Studio 並重新開啟解決方案之後,請以滑鼠右鍵按一下類別或方法,然後選擇 [ 建立 IntelliTest]。 在此處選擇您安裝的框架:

IntelliTest 的選擇其他單元測試架構的螢幕擷取畫面。

然後執行 IntelliTest,在其對應 的.g.cs 檔案中產生個別單元測試。

問:我可以進一步瞭解測試的產生方式嗎?

答: 是的,若想獲得高層次概述,請閱讀這篇 博文