Web API プロジェクトの単体テストを実行しようとしています。Web API ホスティング環境をシミュレートします。インメモリホスト(HttpServer)またはセルフホスト(HttpSelfHostServer)を使用できるようです。
違いは何ですか、どのテクノロジーが何に適しているのか、それらのオプションに制限はありますか。
Web API プロジェクトの単体テストを実行しようとしています。Web API ホスティング環境をシミュレートします。インメモリホスト(HttpServer)またはセルフホスト(HttpSelfHostServer)を使用できるようです。
違いは何ですか、どのテクノロジーが何に適しているのか、それらのオプションに制限はありますか。
エンド ツー エンドのテストにはメモリ内ホストを使用してから、環境のネットワーク接続を個別にテストする必要があります。
いくつかの理由から:
名前が示すように、メモリ内ホストは完全にメモリ内で実行されるため、はるかに高速になります
自己ホストは昇格された権限で実行する必要があるため、テストは「管理者」ID のコンテキスト内で実行する必要があります。これは望ましいことではありません。ビルド スクリプトや PowerShell などからテストを実行する場合は特に面倒です。その結果、これらのプロセスも昇格された権限で開始する必要があるからです。さらに、これは、テストするサーバーのいずれかで発生する必要があります。
セルフ ホストでは、特定のオペレーティング システムのネットワーク スタックをテストすることになりますが、これは実際にはテストすべきではないものです。さまざまな環境 (開発、ステージング、QA、運用など) によって異なる可能性があるためです。たとえば、特定のポートが使用できない場合があります。その結果、テストを実行するために、さまざまなマシン間で不必要なデバッグ作業に巻き込まれる可能性があります。
最後に、セルフホスティングを使用したテストでは、Web ホストされている場合にサービスが正しく実行されること、およびその逆の場合にサービスが正しく実行されることは保証されません。したがって、メモリ内でテストすることもできます。