次の方法で共有


MSTest v3 移行ガイド

このガイドは、ユーザーが MSTest v1 から MSTest v3 に MSTest プロジェクトをアップグレードするのに役立ちます。 MSTest v3 では、テストの信頼性、実行速度、および最新の .NET フレームワークとの互換性を向上させるために、重要な新機能、最適化、いくつかの破壊的変更が導入されています。

影響を受けるユーザー

このガイドは、現在 .NET Framework プロジェクト 次のいずれかを介して 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 8 や将来のイテレーションを含む最新の .NET バージョンに対して堅牢なサポートを提供します。 つまり、テストは適応性が高く、アップグレードの準備が整い、古いテスト フレームワークの技術的負債を回避できます。

  • 新しいアナライザーによるコードの信頼性の向上: MSTest v3 組み込みのコード アナライザーはベスト プラクティスを適用し、問題を早期にキャッチし、よりクリーンで保守しやすいテスト コードを促進するのに役立ちます。

    • プロアクティブな問題検出: アナライザーはリアルタイムのフィードバックを提供し、改善点を提案し、テストの記述時に潜在的な問題にフラグを設定します。

    • 型セーフ アサーションの強化: あいまいなオーバーロードを置き換えると、MSTest v3 では型セーフ アサーションが適用され、テスト動作が正しくないリスクが軽減され、テストの信頼性が向上します。

    • クリーナー コード、メンテナンスの短縮: テストを MSTest の標準とベスト プラクティスに合わせることにより、MSTest v3 は、よりクリーンで管理しやすいコードベースを維持し、時間の経過と共に技術的負債を削減するのに役立ちます。

  • 柔軟性と拡張性の向上: MSTest v3 では、動的データ ソースやアセンブリ内の並列実行など、高度なテスト シナリオがサポートされます。 この柔軟性により、より高度なテスト アプローチが可能になり、複雑な構成なしでテスト スイートが高速化されます。

アップグレードすることで、テストをより迅速かつ信頼性が高く、将来の .NET 開発に適応できるように設定し、プロジェクトを長期的な成功とメンテナンスの容易化に向けて配置します。

移行の手順

1. アセンブリ参照を削除する

アセンブリ参照を介して MSTest v1 を使用するプロジェクトの場合、次の DLL への参照があります。

  • Microsoft.VisualStudio.QualityTools.UnitTestFramework

SDK 以外のスタイルのプロジェクトでは、これらの参照は、XML を直接編集するのではなく、Visual Studio を使用して追加されることがよくあります。 Visual Studio GUI を使用してこれらの参照を削除するには:

  1. Visual Studio でソリューション エクスプローラーを開きます。

  2. MSTest を使用して プロジェクトのプロジェクト ノードを展開します。

  3. プロジェクト内の References フォルダーを見つけます。

  4. Referencesフォルダー内で、MSTest DLL 参照を見つけて選択します。Microsoft.VisualStudio.QualityTools.UnitTestFramework

  5. 選択した参照 右クリックし、コンテキスト メニューから Remove を選択します。

    image

  6. プロジェクトを保存 変更を適用します。

2. プロジェクトを更新する

次の 2 つの方法のいずれかで、プロジェクトを MSTest v3 に更新できます。

  • パッケージの更新: MSTest.TestFrameworkMSTest.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 スタイルのプロジェクトの場合): MSTest SDK のバージョンを指定するように .csproj ファイルを更新します。

    <Project Sdk="MSTest.Sdk/3.6.2">
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
      </PropertyGroup>
    </Project>
    

プロジェクトのセットアップに最適なオプションを選択します。 どちらの方法でも、MSTest v3 を使用するようにプロジェクトがアップグレードされます。

3. コードを更新する

  • Assert.AreEqual/AreNotEqual または Assert.AreSame/AreNotSame (オブジェクトあり) これらのアサーションのいずれかがエラーを引き起こす場合は、比較される型に互換性があることを確認することをお勧めします。 その場合は、明示的なジェネリック型指定を追加して問題を解決することを検討してください。

  • ジェネリックの使用:

    Assert.AreEqual<customObject>(expectedObject, actualObject);
    Assert.AreNotEqual<customObject>(expectedObject, actualObject);
    
  • 初期化のテスト: 非同期初期化には TestInitialize メソッドを使用します。

  • Cleanup: クリーンアップには、 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 では、異なる .NET 環境間で一貫した動作を確保するために、 Timeout 設定の処理が標準化されています。 この変更は、特定のタイムアウト値に依存するテストに影響を与える可能性があります。特に、これらのテストが非同期であるか、異なるフレームワークで実行されている場合です。

  • 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 パッケージをインストールできます。

その他のリソース