MSTestV1 から MSTestV2 へのアップグレード

テスト プロジェクトをアップグレードするには、 .csproj で参照されている MSTest バージョンを MSTestV1 から MSTestV2 に再ターゲットします。 MSTestV1 のすべての機能が MSTestV2 に導入されたわけではないため、エラーを解決するためにいくつかの変更が必要になる場合があります。 機能しなくなった機能については、「MSTestV2 でサポートされていない MSTestV1 の機能」を参照してください。 これらの機能の一部をテストから削除する必要がある場合があります。

  1. 単体テスト プロジェクトから Microsoft.VisualStudio.QualityTools.UnitTestFramework へのアセンブリ参照を削除します。

  2. nuget.org の MSTest.TestFramework および MSTest.TestAdapter のパッケージを含む NuGet パッケージ参照を MSTestV2 に追加します。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>

Note

コード化された UI テストまたは Web ロード テストのテスト プロジェクトは、MSTestV2 と互換性がありません。 これらのプロジェクト タイプは非推奨になっています。 詳細については、コード化された UI テストの非推奨化Web ロード テストの非推奨化に関するページをご覧ください。

SDK スタイルの .csproj (.NET Core および .NET 5 以降)

.csproj が新しい SDK スタイルの .csproj の場合、MSTestV2 を既に使用している可能性があります。 MSTestV2MSTestV2 アダプター の NuGet パッケージは、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>
    
  • アセンブリ内でのテストの並列実行によって、並列実行をより細かく制御できます。 この機能により、アセンブリ内のテストを並行して実行できるようになります。

  • TestClassTestCleanup メソッドは、対応する TestInitialize メソッドが失敗した場合でも呼び出されます。 問題の詳細情報

  • AssemblyInitializeClassInitialize にかかった時間は、テスト期間にはカウントされません。 この変更により、テストのタイムアウトへの影響が制限されます。

  • 実行不可能なテストは、.runsettings ファイルのアダプター ノードの一部である MapNotRunnableToFailed タグを使用して、失敗としてマークするように構成できます。

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

MSTestV2 でサポートされていない MSTestV1 の機能

  • テストを "順序指定テスト" に含めることはできません。
  • .testsettings ファイルの変更:
    • 今後、アダプターの構成には利用できません。
    • 今後、<LegacySettings> セクションはサポートされません。つまり、それを使用して属性を設定できません。 たとえば、「 DeploymentItem 」のように入力します。 テストの実行構成には、新しい .runsettings ファイルを使用します。
  • アダプターでは、 .vsmdi ファイルとして指定されたテスト リストはサポートされていません。
  • "コード化された UI テスト プロジェクト" と "Web パフォーマンスとロード テストのプロジェクト" タイプはサポートされていません。 詳細については、コード化された UI テストの非推奨化Web ロード テストの非推奨化に関するページをご覧ください。
  • TFS のテストケース項目との関連付けはサポートされていません。