次の方法で共有


カスタム拡張機能を作成する

この記事は、Microsoft.Testing.Platform 用のカスタム テスト フレームワークまたは拡張機能を構築する開発者向けです。

完全なサンプル コードについては、Microsoft Test Framework リポジトリの TestingPlatformExamples を参照してください。

拡張ポイントの概要

拡張ポイント プロセスのイン/アウト 目的
ITestFramework 処理中 唯一の必須の拡張機能。 テストを検出して実行します。
IDataConsumer 処理中 メッセージバスのテストデータを購読し、処理します。
ITestSessionLifetimeHandler 処理中 テスト セッションの前後にコードを実行します。
ITestApplicationLifecycleCallbacks 処理中 テスト ホストの最初と最後にコードを実行します。
ICommandLineOptionsProvider 両方とも カスタム コマンド ライン オプションを追加します。
ITestHostEnvironmentVariableProvider プロセス外 テスト ホストを開始する前に環境変数を設定します。
ITestHostProcessLifetimeHandler プロセス外 テスト ホスト プロセスを外部で観察します。

インプロセス拡張機能とアウトプロセス拡張機能

拡張機能は、次の 2 種類に分類されます。

  • インプロセス拡張機能は 、テスト フレームワークと共に、テスト ホスト プロセス内で実行されます。 builder.TestHostを使用して登録します。

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHost.AddXXX(/* ... */);
    
  • アウトプロセス拡張機能は 、テスト ホストを観察する別のプロセスで実行されます。 builder.TestHostControllersを使用して登録します。

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHostControllers.AddXXX(/* ... */);
    

アウトプロセス拡張機能は、次の場合に必要です。

  • テスト ホストを開始する前に環境変数を設定する必要があります。
  • ユーザー コードがクラッシュしたり、プロセスがハングしたりする可能性があるため、テスト ホストを外部で監視する必要があります。

アウトプロセス拡張機能が登録されると、プラットフォームは 2 番目のプロセスを自動的に開始します。

IExtension インターフェイス

すべての拡張ポイントは IExtensionから継承され、識別とオプトイン/オプトアウトが提供されます。

public interface IExtension
{
    string Uid { get; }
    string Version { get; }
    string DisplayName { get; }
    string Description { get; }
    Task<bool> IsEnabledAsync();
}
  • Uid: 拡張機能の一意の識別子。 競合を回避するには、一意の値を選択します。
  • Version: セマンティック バージョン管理を使用する拡張機能のバージョン。
  • DisplayName: ログと --info 出力に表示されるわかりやすい名前。
  • Description: --info 出力に表示される説明。
  • IsEnabledAsync(): セッションから拡張機能を除外する false を返します。 通常、決定は構成またはコマンド ライン オプションに基づいています。
  • テスト フレームワークを構築する: カスタム ITestFramework 実装を作成し、要求を処理し、テスト結果を報告します。
  • 拡張機能をビルドする: データ コンシューマー、セッション ハンドラー、プロセス モニターなどのインプロセス拡張機能とアウトプロセス拡張機能を作成します。
  • VSTest Bridge: 既存の VSTest ベースのテスト フレームワークの Microsoft.Testing.Platform への移行を簡略化します。
  • 機能: フレームワークと拡張機能の宣言とクエリを実行します。
  • サービス: アクセス構成、ログ記録、メッセージ バス、およびその他のプラットフォーム サービス。