Asp.net web api 内存中HTTP服务器Asp.net WebAPI

Asp.net web api 内存中HTTP服务器Asp.net WebAPI,asp.net-web-api,integration-testing,Asp.net Web Api,Integration Testing,我试图了解基于自主机配置的集成测试是如何运行的 在下面的代码中,我应该向WebApiConfig注册配置。注册与否似乎没有什么区别 整个管道是否真的在测试中,或者这是一种错觉?因为,如果我没有使用API中定义的配置和路由,而不是像这里所做的那样声明自己的配置和路由,那么我可能只是没有测试完整的pipleine 是否有其他方法完全测试api。下面的代码正在测试很多东西,除了我的管道(比如客户端、自托管等等)。对我来说,这似乎是过分的。有什么想法吗 var config = new HttpSelf

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

在下面的代码中,我应该向WebApiConfig注册配置。注册与否似乎没有什么区别

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

是否有其他方法完全测试api。下面的代码正在测试很多东西,除了我的管道(比如客户端、自托管等等)。对我来说,这似乎是过分的。有什么想法吗

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();
            }
var config=新的HttpSelfHostConfiguration(“http://localhost:9090/");
config.Routes.MapHttpRoute(“默认值”、“{api}/{controller}/{id}”、新的{id=RouteParameter.Optional});
config.IncludeErrorDetailPolicy=IncludeErrorDetailPolicy.Always;
MyApiProject.WebApiConfig.Register(配置);
使用(var服务器=新的HttpSelfHostServer(配置))
{
server.OpenAsync().Wait();
使用(var client=new HttpClient())
{
使用(var response=client.PostAsync(“http://localhost:9090/api/login",

新FormUrlEncodedContent(新列表{new KeyValuePair如果你只想测试你的控制器,你可以编写更多有针对性的单元测试来测试它们。如果你想测试完整的管道,你的代码看起来很好,除了可以使用HttpServer而不是selfhost,这样可以节省网络开销。另外,如果你正在测试完整的管道,最好使用rou您在实际应用程序中拥有的tes,而不是添加新路由,因为这也将测试路由


此外,有关测试web API的一些想法,请参阅Youssef的本博客。

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


另外,有关测试web api的一些想法,请参阅Youssef的博客。

我不是在看单元测试,正如您所说,它们是独立的和有针对性的。在我在问题中提到的测试中,使用我在api中指定的配置的正确方法是什么?您可以调用相同的代码,即添加所有路由我相信
MyApiProject.WebApiConfig.Register(配置)
仅此而已。我不是在看单元测试,它们是独立的,正如你所说的那样有针对性。在我在问题中提到的测试中,使用我在api中指定的配置的正确方法是什么?你可以调用相同的代码,即添加所有路由和其他内容。我相信
MyApiProject.WebApiConfig.Register(config);
仅执行此操作。