MSTest v3 移轉指南
本指南可協助使用者將 MSTest 專案從 MSTest v1 升級至 MSTest v3。 MSTest v3 引進了重要的新功能、優化和一些重大變更,以改善測試可靠性、執行速度和與新式 .NET 架構的相容性。
誰會受到影響?
本指南適用於目前 透過下列其中一項使用 MSTest v1 的專案 :
- 元件參考:直接參考
Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
的專案。 - NuGet 套件:搭配 1.0.0-1.4.0 版使用
MSTest.TestFramework
NuGet 套件的專案。
如果您的項目依賴 MSTest 進行單元測試,並包含上述參考,它將受益於 MSTest v3 中的改進,而且需要本指南中所述的調整。
為什麼要移轉至 MSTest v3?
即使您對目前的 MSTest 設定感到滿意,升級至 MSTest v3 仍可發揮大幅優勢,以改善測試的質量和未來整備程度。 這就是為什麼現在進行切換可能是向前邁出的重要一步:
增強安全性:MSTest v1 具有已知的安全性弱點。 透過 MSTest v3,我們已實作廣泛的安全性改進,以保護測試環境。
立即提升效能:MSTest v3 可大幅減少測試運行時間,並將資源使用量優化。 這在 CI/CD 管線中特別有用,其中更快速的測試可以縮短部署週期並降低基礎結構成本。
未來證明您的測試:MSTest v3 為新式 .NET 版本提供強大的支援,包括 .NET 8 和未來的反覆專案,以及跨平臺相容性。 這表示您的測試將更容易調整並準備好進行升級,避免過時測試架構的技術債務。
使用新分析器提高程式代碼可靠性:MSTest v3 內建程式代碼分析器會強制執行最佳做法,協助儘早捕捉問題,並提升更簡潔、更容易維護的測試程序代碼:
主動式問題偵測:分析器會在撰寫測試時提供即時意見反應、建議改進和標幟潛在問題。
更強型別安全判斷提示:取代模棱兩可的多載,MSTest v3 會強制執行類型安全判斷提示,降低不正確的測試行為風險,並讓測試更可靠。
更簡潔的程式代碼、較少的維護:藉由將測試與 MSTest 標準和最佳做法一致,MSTest v3 可協助您維護更簡潔、更容易管理的程式代碼基底,並隨著時間降低技術債務。
更大的彈性和擴充性:MSTest v3 支援進階測試案例,包括動態數據源和元件內平行執行。 這種彈性可啟用更複雜的測試方法,並加速測試套件,而不需要複雜的組態。
藉由升級,您會將測試設定為更快速、更可靠且可適應未來的 .NET 開發,並將專案定位為長期成功且更容易維護。
移轉步驟
1.移除元件參考
對於透過元件參考使用 MSTest v1 的專案,有下列 DLL 的參考:
Microsoft.VisualStudio.QualityTools.UnitTestFramework
在非 SDK 樣式專案中,這些參考通常會透過 Visual Studio 新增,而不是直接編輯 XML。 若要使用 Visual Studio GUI 移除這些參考:
在 Visual Studio 中開啟 方案總管。
使用 MSTest 展開項目的項目節點 。
找出專案中的 References 資料夾。
在 [ 參考] 資料夾內, 尋找並選取 MSTest DLL 參考,
Microsoft.VisualStudio.QualityTools.UnitTestFramework
以滑鼠右鍵按下 選取的參考,然後選擇 操作選單中的 [移除 ]。
儲存專案 以套用變更。
2.更新專案
您可以使用下列兩種方式之一,將專案更新為 MSTest v3:
更新套件:如果您有 MSTest.TestFramework 和 MSTest.TestAdapter 的 NuGet 套件參考,請使用 Visual Studio 中的 NuGet 封裝管理員,或在 NuGet 封裝管理員 控制台中執行下列命令來更新它們:
Update-Package MSTest.TestFramework -Version 3.6.2 Update-Package MSTest.TestAdapter -Version 3.6.2
或安裝 MSTest 套件:使用 Visual Studio 中的 NuGet 封裝管理員,或在 NuGet 封裝管理員 控制台中執行下列命令,安裝最新的 MSTest 套件:
Install-Package MSTest -Version 3.6.2
或直接 更新項目檔(適用於 SDK 樣式的專案):更新您的
.csproj
檔案以指定 MSTest SDK 版本。<Project Sdk="MSTest.Sdk/3.6.2"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> </PropertyGroup> </Project>
選擇最適合您項目設定的選項。 這兩種方法可確保您的專案已升級為使用 MSTest v3。
3.更新您的程序代碼
Assert.AreEqual/AreNotEqual 或 Assert.AreSame/AreNotSame (with object) 如果其中一個判斷提示造成錯誤,建議您確認要比較的類型兼容。 如果是,請考慮新增明確的泛型類型來解決問題。
使用泛型:
Assert.AreEqual<customObject>(expectedObject, actualObject); Assert.AreNotEqual<customObject>(expectedObject, actualObject);
測試初始化:使用
TestInitialize
異步初始化的方法。清除:使用
TestCleanup
方法或Dispose
模式進行清除。RunSettings:不再支持檔案
.testsettings
,這表示<LegacySettings>
也不再可用。 使用 .runsettings 進行測試組態。
MSTest v3 的新功能
- 已改善測試項目的預設值
- 簡化的設定和使用方式
- MSTest 執行器的增強擴充性
- 適用於改善測試開發的新 Roslyn 程式代碼分析器
- WinUI 應用程式的支援
- 元件內平行執行
- 數據驅動測試的動態數據源
已被取代的功能
- 已卸除對下列項目的支援:
- .NET Framework 4.5 (使用 .NET 4.6.2 或更高版本)
- .NET Standard 1.0 (使用 .NET Standard 2.0)
- 16299 之前的UWP版本
- 18362 之前的 WinUI 版本
- .NET 5 (使用 .NET Core 3.1 或 .NET 6)
重大變更和已移除的 API
判斷提示多載
如果 AreEqual、AreNotEqual、AreSame 或 AreNotSame 判斷提示會造成錯誤,建議您檢查要比較的類型是否相容。 如果是,請考慮新增明確的泛型類型來解決問題。
DataRowAttribute
更新
MSTest v3 中的 DataRowAttribute 建構函式已簡化,以強制執行參數的類型比對。 這表示您必須在 DataRow 中指定值,以精確符合方法參數的類型。
範例:
[TestMethod]
[DataRow(1, "test")] // Correct: matches parameter types (int, string)
public void MyTestMethod(int number, string text) { ... }
如果類型不完全相符,MSTest v3 現在會引發錯誤,而不是嘗試轉換。
逾時設定
在 MSTest v3 中,設定的 Timeout
處理已標準化,以確保在不同 .NET 環境中的行為一致。 這項變更可能會影響依賴特定逾時值的測試,特別是當這些測試是異步或在不同的架構下執行時。
- 在 MSTest v1 或 v2 中,某些逾時設定可能會根據架構(例如 .NET Framework 與 .NET Core)以不同的方式解譯。
- MSTest v3 會強制執行一致的逾時行為,這表示如果新標準下逾時值太短,則以逾時值設定的測試可能會失敗或行為不同。
這表示:
具有逾時的測試可能需要調整:如果您的測試具有
Timeout
特定持續時間的屬性,請確認這些值仍允許在 MSTest v3 下完成測試。 先前以特定逾時通過的測試可能需要更高或較低的逾時值,才能在新規則下正常運作。整合逾時處理:MSTest v3 整合逾時處理可讓逾時更容易預測,但需要檢查並可能更新
Timeout
舊版測試中的值。
範例:
// Old (v1/v2) - Timeout was sometimes interpreted inconsistently
[TestMethod]
[Timeout(2000)] // Timeout in milliseconds
public void TestMethod() { ... }
// New (v3) - Unified handling of timeout
[TestMethod]
[Timeout(2000)] // Verify this value still works under MSTest v3
public async Task TestMethod() { ... }
設定變更
確定 .runsettings
檔案與 MSTest v3 語法和結構一致。
平行執行和效能優化
在 .runsettings 中設定平行執行,以改善效能。
範例:
<RunSettings>
<RunConfiguration>
<MaxCpuCount>-1</MaxCpuCount> <!-- Uses all available processors -->
</RunConfiguration>
</RunSettings>
改善的資源使用量
MSTest v3 會優化資源管理,進而降低記憶體使用量,並提升 CPU 效率。
處理過時的屬性並移轉自定義延伸模組
檢閱已被取代的屬性,並盡可能以 MSTest v3 替代專案取代它們。
程序代碼分析器和最佳做法
MSTest v3 包含適用於最佳做法的內建程式代碼分析器、避免設定陷阱,以及適當使用 MSTest 屬性和設定。 使用 MSTest 套件或 MSTest.Sdk 時,系統會自動提供此功能,或者您可以安裝 MSTest Analyzer 套件。