ホストのデプロイをテストする

これらの拡張機能は、MTP がテスト ホストをデプロイおよび開始する方法と場所を制御します。 試験的な ITestHostLauncher 拡張機能ポイントを使用して、テスト ホストの展開と起動を制御します。

ヒント

Microsoft.Testing.Platform.MSBuild を使用する場合は、拡張機能を自動的に登録するために、その拡張機能の NuGet パッケージをインストールします。 MSTest、NUnit、xUnit ランナーには、推移的に Microsoft.Testing.Platform.MSBuild が含まれます。 生成されたエントリ ポイントを無効にした場合は、 AddSelfRegisteredExtensions を呼び出して、MSBuild が提供するパッケージを登録します。

パッケージ アプリのデプロイ

Microsoft。Testing.Extensions.PackagedApp 拡張機能は、ビルド出力レイアウトからパッケージ化されたWindowsテスト ホストを登録し、アプリケーション ユーザー モデル ID (AUMID) によってアクティブ化します。

このパッケージは MTP 2.3 で導入されました。 MTP 2.5 から、パッケージ化されたフルトラスト ホストおよび AppContainer ホストをエンドツーエンドでサポートします。これには次が含まれます:

  • パッケージ化された完全信頼 WinUI 3 アプリ。
  • UseUwpを使用する最新の UWP アプリ。
  • uap10.0を対象とする従来の UWP アプリ。
  • WinUI 3 packagedClassicApp 、 TrustLevel="appContainer"を設定するホストです。

MSTest.Sdk 4.5 以降では、この拡張機能と、必要な完全信頼アプリ モデル サイドカーが自動的に構成されます。 アプリケーションのセットアップとコマンドの実行については、 MSTest と MTP を使用した UWP アプリと WinUI 3 アプリのテストに関するページを参照してください。

Caution

MTP 2.4 以降、 Microsoft.Testing.Extensions.PackagedApp は MTP リリース バージョンに従っており、パブリック登録 API は試験段階ではなくなりました。 汎用 ITestHostLauncher 拡張ポイントは試験段階のままであり、将来のリリースで変更される可能性があります。

要件を満たす

拡張機能を使用する前に、次の要件を満たします。

  • WinUI 3 パッケージ アプリのターゲット Windowsプラットフォーム バージョン 10.0.19041.0 以降。
  • 署名されていないビルド出力レイアウトを登録するには、開発者モードを有効にするか、サイドローディングを構成します。
  • UWP の場合は、UWP ワークロードと必要な Windows SDK でVisual Studioからデスクトップ MSBuild を使用します。
  • 管理者特権以外のコントローラー プロセスから AppContainer テスト ホストを実行します。

パッケージの有効化を理解する

パッケージ アプリの場合、ランチャーは次の操作を行います。

  1. テスト実行可能ファイルを記述する AppxManifest.xml を検索します。
  2. 現在のユーザーのビルド出力レイアウトを登録します。
  3. 選択したマニフェスト アプリケーションの AUMID を解決します。
  4. アプリケーションをアクティブ化し、MTP コントローラーに接続します。

packagedClassicAppおよびwin32Appホストの場合、Windowsは通常のプロセス引数配列を介して MTP 引数を提供します。 この動作は、AppContainer を使用する packagedClassicApp にも適用されます。

UWP windowsAppの場合、Windowsは、LaunchActivatedEventArgs.Argumentsを介して 1 つの不透明なアクティブ化文字列を提供します。 OnLaunchedで、MTP ビルダーを作成する前にPackagedAppExtensions.GetTestApplicationArgumentsを呼び出します。

AppContainer ホストを接続する

AppContainer トークンには、制限付きパッケージ SID が含まれています。 現在のユーザーのみを承認する名前付きパイプは、同じサインイン ユーザーに属している場合でも AppContainer プロセスを拒否します。

MTP 2.5 以降では、パッケージ アプリ起動ツールは、選択したアプリケーションの正確なパッケージ SID を派生させ、その SID にコントローラーと拡張パイプに対する最小クライアント権限を付与するように MTP に要求します。 拡張機能は、 ALL APPLICATION PACKAGESを許可したり、パイプの整合性レベルを下げたり、ネットワーク ループバックの除外を必要としたりしません。

サイドカーは、パッケージ LocalStateを介してコントローラーメタデータを転送します。 また、TRX、ダンプ、診断、再試行の成果物は、サンドボックス ホストが終了した後、パッケージ所有のストレージから要求された結果ディレクトリにコピーされます。

自動アクティブ化を制御する

既定では、ランチャーは、テスト アプリケーションを記述するパッケージ マニフェストを見つけた場合にのみ、それ自体を有効にします。 パッケージ化されていない WinUI 3 アプリまたは通常のコンソール テスト アプリは、ダイレクト スタート パスにとどまります。

パッケージ検出をオーバーライドするには、 TESTINGPLATFORM_PACKAGEDAPP_LAUNCHER を使用します。

価値 Behavior
auto または未設定 パッケージ レイアウトに対してのみ有効にします。
always 起動前に展開する緩いレイアウトなど、任意のレイアウトに対して有効にします。
never パッケージ アプリ起動ツールを無効にします。

TESTINGPLATFORM_PACKAGEDAPP_PIPEAUTHORIZATIONを使用してパッケージ SID 承認をオーバーライドします。

価値 Behavior
auto または未設定 マニフェストで AppContainer アプリケーションが宣言されている場合にのみ、パッケージ SID を承認します。
always 任意のパッケージ レイアウトに対する package-SID 承認を要求します。
never 現在のユーザー専用のパイプ承認を保持します。

拡張機能を手動で登録する

MSBuild の自動登録を使用しない場合は、MTP ビルダーに拡張機能を登録します。

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddPackagedAppDeployment();

アプリケーションが既にAddSelfRegisteredExtensionsを呼び出してパッケージを参照している場合は、AddPackagedAppDeploymentを呼び出さないでください。 MTP 実行で登録できるテスト ホストランチャーは 1 つだけです。