WebAPIコントローラのテストの基礎として使用したい統合テストがあります。ユニットテストシナリオでasp.net WebApiを使用するHttpClient
私は自己ホストモードでWebAPIをセットアップし、ローカルHttp経由でエンドツーエンドのテストを実行する必要があると考えました。
しかしWebApiContribプロジェクトのテストを見て、WebAPIコントローラへの正しいサービスルートでHttpServerをセットアップしてHttpClientを設定することが可能になったことに気付きました。私は自己ホストモードでWebApiを設定せずにコントローラをユニットテストできるようです。私はクライアントの要求に任意のドメイン名を入れることができ、HttpClientは自動的に正しいコントローラにバインドされているようです。
いくつかのローカルプロセス間通信を使用して、または同じアプリケーションドメイン内にサーバーがあり、リフレクションを使用していることを純粋に「見ている」ことを使用して、ここでHTTP転送が行われていますか? これが起こるためにフードの下で何が起こっていますか?
コード:
[Test]
public void Test_WebApi_Controller()
{
Assembly.Load("myproj.Web");
var prodServiceMock = new Mock<IProductService>();
ObjectFactory.Initialize(x => x.For<IProductService>().Use(prodServiceMock.Object));
var config = new HttpConfiguration();
config.Routes.MapHttpRoute("default", "webapi/{controller}/{id}", new { id = RouteParameter.Optional });
config.ServiceResolver.SetResolver(new WebApiDependencyResolver());
var server = new HttpServer(config);
var client = new HttpClient(server);
var response = client.GetAsync("http://anything.com/webapi/product").Result;
}
ハンドラへの直接呼び出しをどのように知っていますか? HttpServerもネットワーク接続に使用されていませんか? – jaffa
@jaffa HttpClientは、すべての要求をHttpMessageHandlerに送信します。 HttpServerは、すべてのネットワークの処理を担当するホスト上にあります。 IIS、WCF Self Host、または他のOwinホスト。 –