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 探索您的程式碼並產生單元測試
若要產生單元測試,您的類型必須是公用的。
在 Visual Studio 中開啟您的解決方案,然後開啟具有您要測試方法的類別檔案。
以滑鼠右鍵按一下方法,然後選擇 [執行 IntelliTest ] ,以產生方法中程式碼的單元測試。
IntelliTest 會使用不同的輸入多次執行您的程式碼。 每個執行都會在表格中表示,其中顯示輸入測試資料和產生的輸出或例外狀況。
若要產生類別中所有公用方法的單元測試,只要在類別中按一下滑鼠右鍵,而不是特定方法,然後選擇 [執行 IntelliTest]。 使用「 探索結果」 視窗中的下拉清單,以顯示類別中每一個方法的單元測試及輸入資料。
對於通過的測試,請檢查結果欄中報告的結果是否符合您對程式碼的期望。 對於失敗的測試,請視需要修正程式碼。 然後重新執行 IntelliTest 以驗證修正。
Persist:將單元測試儲存為迴歸套件
選取您要將參數化單元測試儲存到測試專案的資料列。
您可以檢視已建立的測試專案和參數化單元測試 - 對應於每個列的個別單元測試會儲存在測試專案的 .g.cs 檔案中,而參數化單元測試會儲存在其對應 的.cs 檔案中。 您可以執行單元測試,並檢視測試總管的結果,就像您手動建立的任何單元測試一樣。
任何必要的參考也會新增至測試專案。
如果方法程式碼變更,請重新執行 IntelliTest,讓單元測試與變更保持同步。
協助:使用 IntelliTest 來聚焦程式碼探勘
如果您有更複雜的程式碼,IntelliTest 會協助您專注於程式碼探索。 例如,如果您有將介面作為參數的方法,而且有多個類別實作該介面,IntelliTest 會探索這些類別並報告警告。
查看警告以決定您要執行的動作。
調查程式碼並瞭解您要測試的內容之後,您可以修正警告,以選擇要用來測試介面的類別。
此選擇會新增至 PexAssemblyInfo.cs 檔案中。
[assembly: PexUseType(typeof(Camera))]現在,您可以重新執行 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 搭配使用嗎?
A: 是的,請按照以下步驟尋找並安裝其他框架。 Visual Studio Marketplace 中也提供測試架構延伸模組,例如 NUnit 測試產生器。
重新啟動 Visual Studio 並重新開啟解決方案之後,請以滑鼠右鍵按一下類別或方法,然後選擇 [ 建立 IntelliTest]。 在此處選擇您安裝的框架:
然後執行 IntelliTest,在其對應 的.g.cs 檔案中產生個別單元測試。
問:我可以進一步瞭解測試的產生方式嗎?
答: 是的,若想獲得高層次概述,請閱讀這篇 博文。