Share via


從 MSTestV1 升級至 MSTestV2

您可以將 .csproj 中參考的 MSTest 版本從 MSTestV1 重定為 MSTestV2,以升級測試專案。 並非 MSTestV1 中的所有功能都已導入 MSTestV2 中,因此可能需進行一些變更才能解決錯誤。 請參閱 MSTestV2 中不支援的 MSTestV1 功能,了解哪些功能不再有作用。 其中一些功能可能需要從測試中移除。

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

  2. 將 NuGet 套件參考新增至 MSTestV2,包括 nuget.org 上的 MSTest.TestFrameworkMSTest.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>

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

<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 應用程式 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 中的測試案例項目關聯。