在Owin中,可以使用TestServer在单元测试中测试web api(参见本
blog).
这个功能是否适用于asp.net 5中间件?
更新:
根据下面的回答,我尝试使用TestServer,但是visual studio抱怨’名称空间名称’AspNet’在名称空间’Microsoft’中不存在(你……)
>我使用Visual Studio 2015
>在我的nuget来源(设置)我有(https://www.myget.org/F/aspnetmaster/)
(我也试过https://www.myget.org/F/aspnetvnext/,但遇到了同样的问题)
>这是我的project.json文件
{ "version": "1.0.0-*","dependencies": { "Microsoft.AspNet.Http": "1.0.0-*","Microsoft.AspNet.TestHost": "1.0.0-*","Microsoft.AspNet.Hosting": "1.0.0-*","Microsoft.AspNet.Testing" : "1.0.0-*","xunit": "2.1.0-beta1-*","xunit.runner.aspnet": "2.1.0-beta1-*","Moq": "4.2.1312.1622","Shouldly": "2.4.0" },"commands": { "test": "xunit.runner.aspnet" },"frameworks" : { "aspnet50" : { "dependencies": { } } } }
解决方法
它也可以在ASP.NET 5上使用:
Microsoft.AspNet.TestHost.
这是一个例子.中间件:
public class DummyMiddleware { private readonly RequestDelegate _next; public DummyMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { Console.WriteLine("DummyMiddleware"); context.Response.ContentType = "text/html"; context.Response.StatusCode = 200; await context.Response.WriteAsync("hello world"); } }
测试:
[Fact] public async Task Should_give_200_Response() { var server = TestServer.Create((app) => { app.UseMiddleware<DummyMiddleware>(); }); using(server) { var response = await server.CreateClient().GetAsync("/"); Assert.Equal(HttpStatusCode.OK,response.StatusCode); } }
您可以在the tests找到有关TestServer课程用法的更多信息.