2013-02-05 6 views
11

私はWeb APIプロジェクトのためにいくつかのユニットテストをしようとしています。私はWeb APIホスティング環境をシミュレートしようとしています。 In memory host(HttpServer)またはself host(HttpSelfHostServer)を使用できるようです。ユニットテストWeb API(HttpServerまたはHttpSelfHostServerを使用)

どのような違いがあり、どんな技術が良いのか不思議であり、これらのオプションには制限があります。

答えて

12

エンドツーエンドテストでは、メモリホストを使用して、環境のネットワーク接続を個別にテストする必要があります。多くの理由から

:名前が示すように、メモリのホストで

  • は、メモリ内で完全に実行されるので、セルフホストがシステム特権で実行する必要があります

  • はるかに高速になりますあなたのテストは「管理者」のアイデンティティのコンテキスト内で実行される必要があります。これは望遠とは限りません。結果的に、これらのプロセスを昇格された権限で起動する必要があるため、スクリプトやPowerShellからテストを実行するのは特に面倒です。さらに、これはあなたがテストしているサーバーのいずれかで発生する必要があります。

  • セルフホストでは、テストするべきではない実際のオペレーティングシステムのネットワーキングスタックをテストすることになります。異なる環境(開発、ステージング、QA、生産など)によって異なる可能性があります。たとえば、指定されたポートを使用できない可能性があります。その結果、異なるマシン間で不必要なデバッグ作業に陥り、テストを実行することさえできます。あなたがメモリ内だけでなく単なるテスト

+4

あなたが行う可能性がありません -

  • 最後に、自己ホスティングを使用してテストし、まだウェブがホスト型およびその逆の場合に、サービスが正しく動作することを保証するものではありません自己ホストを実行するには常に管理者権限が必要です。ローカルで聞いている場合、非管理者として実行するには、 'config.HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.Exact;'を追加する必要があります。 –

  • +1

    良い点 - まだ痛みはかなりありますが –

    +0

    Owin 'TestServer'の使用をお勧めします。リンク:http://www.juliencorioland.net/archives/using-owin-to-test-your-web-api-controllers#.U9cQE2NraM4 – Youngjae

    関連する問題