2

セルフホスト構成ベースの統合テストがどのように実行されているかを理解しようとしています。

以下のコードでは、構成を WebApiConfig に登録する必要があります。登録してもしなくても大差ないようです。

パイプライン全体が本当にテストされているのでしょうか、それとも幻想なのでしょうか? ここで行ったように、代わりに API で定義された構成とルートを使用していない場合は、独自のものを宣言しているので、完全なパイプラインをテストしていない可能性があります。

API を完全にテストする他の方法はありますか。以下のコードは、パイプライン以外にも多くのことをテストしています (クライアント、SelfHosting など)。これは私にはやり過ぎのように思えます。何か案は ?

var config = new HttpSelfHostConfiguration("http://localhost:9090/");

                config.Routes.MapHttpRoute("Default", "{api}/{controller}/{id}", new { id =  RouteParameter.Optional });


            config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

            MyApiProject.WebApiConfig.Register(config);

            using (var server = new HttpSelfHostServer(config))
            {
                server.OpenAsync().Wait();
                using (var client = new HttpClient())
                {
                    using (var response = client.PostAsync("http://localhost:9090/api/login",
                                            new FormUrlEncodedContent(new List<KeyValuePair<string,string>>                                                                        {      new KeyValuePair<string, strin("Foo","Bar)}), CancellationToken.None).Result)
                    {
                        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
                    }

                    using (var response = client.GetAsync("http://localhost:9090/api/login").Result)
                    {
                        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
                    }
                }
                server.CloseAsync().Wait();
            }
4

1 に答える 1

4

コントローラーをテストするだけの場合は、よりターゲットを絞った単体テストを記述してテストできます。パイプライン全体をテストしたい場合は、セルフホストを使用する代わりに HttpServer を使用してネットワーク オーバーヘッドを節約できることを除いて、コードは問題ないように見えます。また、完全なパイプラインをテストする場合は、新しいルートを追加するのではなく、実際のアプリにあるルートを使用することをお勧めします。これは、ルーティングもテストするためです。

また、 Web API のテストに関するいくつかのアイデアについては、Youssef によるこのブログ投稿を参照してください。

于 2013-03-07T18:06:09.123 に答える