用Owin Host实现脱离IIS跑Web API单元测试
作者:网络转载 发布时间:[ 2015/8/21 15:22:28 ] 推荐标签:软件测试 单元测试
在开发一个ASP.NET Web API项目写单元测试时,实在无法忍受之前的笨方法,决定改过自新。
之前Web API的单元测试需要进行以下的操作:
初始配置:
1)在IIS中创建一个站点指定Web API项目
2)在hosts加上该站点的IP地址解析
每次修改代码:
3)修改代码之后按F6编译
4)用TestDriven.Net运行单元测试
一看知道这个方法好土、好笨、好受罪。理想的方式应该是:无需任何初始配置,修改代码之后无需按F6编译,直接运行单元测试,一步完成操作。
在受不了旧方式的折磨、经不起理想方式的诱惑的情况下,下定决心要解决这个问题,终通过Owin Host实现了,通过这篇博文分享一下。
用Owin Host实现的思路很简单,是在单元测试中以Owin Host运行ASP.NET Web API站点,然后单元测试代码直接请求这个Owin Host站点进行测试。
我们的Web API项目是基于ASP.NET 4.5 + ASP.NET Web API 5.2.3开发的,没有OWIN相关的代码,所以先要在Web API项目中添加一些代码 ,以让Owin Host能够加载之。
首先nuget安装Owin包包(IAppBuilder在此包中):
PM> Install-Package Owin
然后添加Startup.cs:
public class Startup
{
public void Configuartion(IAppBuilder app)
{
}
}
接着nuget安装Microsoft.AspNet.WebApi.Owin包包(app.UseWebApi扩展方法在此包中)
PM> Install-Package Microsoft.AspNet.WebApi.Owin
在Startup.Configuratrion方法中添加代码,调用WebApiConfig.Register方法(这个是之前已经实现的,路由配置在其中)配置HttpConfiguration,然后将之注册到OWIN的管线中。
public class Startup
{
public void Configuration(IAppBuilder app)
{
var configuraton = new HttpConfiguration();
WebApiConfig.Register(configuraton);
app.UseWebApi(configuraton);
}
}
Web API项目只需这样简单改造一下,可以支持Owin Host,无任何副作用,不影响用IIS部署站点。
单元测试代码的改造也很简单,只需在跑测试之前用Microsoft.Owin.Hosting中的WebApp.Start()方法加载Web API站点。
首先nuget安装Owin Host的包包:
PM> Install-Package Microsoft.Owin.Hosting
PM> Install-Package Microsoft.Owin.Host.HttpListener
接着在测试类的构造函数中用WebApp.Start()启动Web API站点:
public class CommentsWebApiTest : IDisposable
{
private const string HOST_ADDRESS = "http://localhost:8001";
private IDisposable _webApp;
public CommentsWebApiTest()
{
_webApp = WebApp.Start<Startup>(HOST_ADDRESS);
Console.WriteLine("Web API started!");
}
public void Dispose()
{
_webApp.Dispose();
}
}
然后可以脱离IIS无比轻松地进行Web API的单元测试了。
下面来实际体验一下:
1)在Web API项目中实现一个ApiController
public class CommentsController : ApiController
{
[Route("blogposts/{postId}/comments")]
public async Task<IHttpActionResult> Get(int postId)
{
var comments = new Comment[] { new Comment {
PostId = postId,
Body = "Coding changes the world1" } };
return Ok<Comment[]>(comments);
}
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11