2017-04-21 17 views
1

ユニットのテストケースでは、TestServerがWebAPIのメモリ内ホスティングに使用されます。この後、私たちはこれまでHttpConnectionは、このようないくつかのコードを使用してWebAPIのを主催作るしようとしている:このコードは例外を与えるAsp.NetCore TestServerを使用してホストされたWebAPIへのHttpClient接続の問題

HttpClient client= new HttpClient(); 
client.BaseAddress("url"); 
client.GetAsync("url").Result(); 

、エラーメッセージを

「接続が拒否されました」。

ただし、下記のコードを使用してHttpClientオブジェクトを取得して上記の手順を実行すると、正常に動作します。

TestServer.CreateClient() 

何故その背後にあるのでしょうか?それはメモリ内のホストWebAPIなのでしょうか?実際のHTTPコンテキストはありませんか?

+0

よく時間を費やしましたが、成功はありませんでした。また、ここからの助けもありませんでした。最後に、依存関係注入によってHttpClientをコントローラに渡すようにコードを変更しました。期待どおりにうまくいきました。 – Munish

答えて

0

これは仕様です。 TestServer.CreateClient()に電話すると、特別なクライアントHttpMessageHandlerのクライアントが作成されます。そのハンドラは、HTTPサーバとして公開することなく、テスト対象のAPIを直接呼び出すことができます。

public class TestServer : IServer, IDisposable 
{ 
    public HttpClient CreateClient() 
    { 
     HttpClient httpClient = new HttpClient(this.CreateHandler()); 
     ... 
    } 
} 

これは、ユニットテストのために十分速く、適切でなければなりません。統合テストを行うには、テスト起動時にKestrelサーバーを実行します。

P.S.明示的なビルディングではなく、DIを使用してアプリケーションの設計が改善されたことを期待します。この方法で問題を解決していただきありがとうございます。