共用方式為


從 MSTestV1 升級至 MSTestV2

您可以透過將 .csproj 中參考的 MSTest 版本從 MSTestV1 切換為 MSTestV2 來升級您的測試專案。 MSTestV1 中的所有功能並未轉送至 MSTestV2,因此可能需要一些變更才能解決錯誤。 請參閱 MSTestV2 不支援 MSTestV1 功能,以瞭解哪些功能不再運作。 其中某些功能可能需要從測試中移除。

  1. 從單元測試專案中移除Microsoft.VisualStudio.QualityTools.UnitTestFramework 的元件參考。

  2. 將 NuGet 套件參考新增至 MSTestV2,包括 MSTest.TestFramework,以及 nuget.org 上的 MSTest.TestAdapter 套件。您可以使用下列命令,在 NuGet 套件管理員控制台中安裝套件:

    PM> Install-Package MSTest.TestAdapter -Version 3.1.1
    PM> Install-Package MSTest.TestFramework -Version 3.1.1
    

舊樣式 csproj 範例

以 MSTestV1 為目標 .csproj 範例:

<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <Private>False</Private>
</Reference>

範例 .csproj 現在以 MSTestV2 為目標:

<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>..\packages\MSTest.TestFramework.2.1.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
</Reference>

注意

編碼 UI 測試或 Web 負載測試的測試專案與 MSTestV2 不相容。 這些項目類型已被取代。 深入瞭解 自動程式化 UI 測試淘汰Web 負載測試淘汰

SDK 樣式 csproj (.NET Core 和 .NET 5 或更新版本)

如果您的 .csproj 是較新的 SDK 樣式 .csproj 您可能已經使用 MSTestV2。 您可以在 NuGet 上找到 MSTestV2MSTestV2 配接器 的 NuGet 套件。

例:

<ItemGroup>
  <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
  <PackageReference Include="MSTest.TestAdapter" Version="3.1.1" />
  <PackageReference Include="MSTest.TestFramework" Version="3.1.1" />
</ItemGroup>

為什麼要升級至 MSTestV2?

在 2016 年,我們發行了使用 MSTestV2 演進 MSTest 架構的下一個步驟。 您可以在公告 部落格文章中深入瞭解這項變更。

  • MSTestV2 更容易取得和更新,因為它會以 NuGet 套件的形式傳遞

  • MSTestV2 開放原始碼

  • 統一應用程式平臺支援 – MSTestV2 是一種聚合實作,可在 .NET Framework、.NET Core、ASP.NET Core 和 UWP 之間提供統一的應用程式平台支援。 深入瞭解

  • 實作是完全跨平臺(Windows、Linux、Mac)。 閱讀更多

  • MSTestV2 支援以 .NET Framework 4.5.0 和更新版本、.NET Core 1.0 和更新版本為目標(通用 Windows Apps 10+)、ASP.NET Core 1.0 和更新版本,以及 .NET 5 和更新版本。

  • 提供統一的單一用戶擴充性機制。 閱讀更多

  • 提供所有 MSTest 型測試項目的統一 DataRow 支援。 閱讀更多

  • 啟用將 TestCategory 屬性放在類別或元件的層級。 深入瞭解

  • 從另一個元件中定義的基類中的測試方法,現在會從衍生的測試類別中被探索並執行。 這項變更將使衍生測試類別類型的行為變得一致。 如果基於相容性原因而不需要此行為,可以使用下列執行設定來將其變更回去:

    <RunSettings>    
    <MSTest> 
      <EnableBaseClassTestMethodsFromOtherAssemblies>false</EnableBaseClassTestMethodsFromOtherAssemblies> 
    </MSTest> 
    </RunSettings>
    
  • 提供對測試中的 元件內平行執行 的更精細控制。 這項功能可讓您平行執行元件內的測試。

  • 即使相應的 TestInitialize 方法失敗,仍會在 TestClass 上調用 TestCleanup 方法。 問題詳細資料

  • AssemblyInitializeClassInitialize 所花費的時間不會計入測試持續時間。 這項變更會限制其對測試逾時的影響。

  • 無法執行的測試可以設定為透過 MapNotRunnableToFailed 標籤示為失敗,這是 .runsettings 檔案中配接器節點的一部分。

    <RunSettings>    
    <MSTest> 
      <MapNotRunnableToFailed>true</MapNotRunnableToFailed> 
    </MSTest> 
    </RunSettings>
    

MSTestV2 不支援的 MSTestV1 功能

  • 測試不能包含在「已排序的測試」中。
  • .testsettings 檔案的變更:
    • 無法再用來設定配接器。
    • 不再支援 <LegacySettings> 區段,這表示您無法使用它來設定屬性。 例如,DeploymentItem。 使用新的 .runsettings 檔案 進行測試執行設定。
  • 配接器不支援指定為 .vsmdi 檔案的測試清單。
  • 不支援「自動程式化 UI 測試專案」和「Web 效能和負載測試專案」類型。 深入了解 程式化 UI 測試淘汰Web 負載測試淘汰
  • 不支援與 TFS 中的測試案例項目關聯。