在内存HTTP服务器Asp.net WebAPI中

时间:2013-03-07 11:34:00

标签: asp.net-web-api integration-testing

我试图了解基于自主机配置的集成测试是如何运行的。

在下面的代码中,我是否应该使用WebApiConfig注册我的配置。注册与否似乎没有任何区别。

完整的管道是否真的被测试或者这是一种错觉?因为,如果我没有使用我的API中定义的配置和路由而是像我在这里所做的那样声明我自己,我可能只是没有测试完整的pipleine。

是否有任何其他方法可以完全测试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();
            }

1 个答案:

答案 0 :(得分:4)

如果您只想测试控制器,可以编写更多有针对性的单元测试来测试它们。如果你想测试整个管道你的代码看起来很好,除了使用HttpServer而不是使用自助主机,你可以节省网络开销。此外,如果您正在测试整个管道,最好使用实际应用中的路由,而不是添加新路由,因为它也会测试路由。

另外,请参阅Youssef撰写的此博客post,了解有关测试Web API的一些建议。