我有一个WebAPI项目和VS测试项目的解决方案。
我的测试通过Url使用RestSharp调用API,而不是实例化控制器本身并注入内容(上下文等)。
我的问题是,有没有办法告诉测试项目在测试运行开始时通过IIS Express启动Web项目?目前我只运行两个VS实例,其中一个实现调试的Web,另一个运行测试包
答案 0 :(得分:3)
我不建议使用网络对Web API进行单元测试。你在测试中打开自己的潜在差异,最终测试的内容远远超过服务本身。
但是,如果你真的必须这样做,也许要测试你的客户可以用API交换信息,那么我建议你考虑自己托管服务:
http://www.asp.net/web-api/overview/hosting-aspnet-web-api/self-host-a-web-api
自托管允许您使用几行代码启动Web API服务器,您可以让测试在正确的位置启动此服务器。在大多数情况下,这应该与在IIS Express中托管服务的行为相同。但是有一些重要的区别。例如,您将无法使用您可能习惯的某些System.Web概念(如HttpContext.Current)。
更新
我写了一篇关于测试可能有用的Web API服务的博客文章 - http://blogs.msdn.com/b/youssefm/archive/2013/01/28/writing-tests-for-an-asp-net-webapi-service.aspx
希望有所帮助。
答案 1 :(得分:2)
我知道这是一个老帖子,但我刚刚面对这个问题。如果/有人读到这个,我可以提供更详细的回复。
简而言之......我创建了一个引用单元测试程序集的控制台应用程序,通过反射和一个简单的菜单系统,您可以运行任何一个测试。
然后我将多个启动项目设置为Web项目和控制台项目。
然后我就可以在同一个会话中调试单元测试和Web项目。无需附加多个解决方案的流程。
答案 2 :(得分:2)
如果您尝试调试测试和服务,请考虑执行此操作
Debug
- > Detach All
。 IIS Express将继续运行。Debug
- > Attach to Process
。查找iisexpress.exe
并附上。但是,您丢失了已分离的Web服务上的“编辑并继续”。
答案 3 :(得分:0)
通过CTRL-F5
在非调试版本中运行Web服务或站点使它独立于Visual Studio运行,并且您可以从VS内部自由运行测试
答案 4 :(得分:0)
我知道已经晚了,但是我使用了以下解决方案:
启动两个Visual Studio实例。在一个VS中开始调试API,然后在另一个VS中调试测试。