WebAPI コントローラーをテストするための基礎として使用したい統合テストがあります。
最初は、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;
}