Visual Studio:单元在同一解决方案中测试Web项目

时间:2013-01-20 00:57:47

标签: visual-studio asp.net-web-api

我有一个WebAPI项目和VS测试项目的解决方案。

我的测试通过Url使用RestSharp调用API,而不是实例化控制器本身并注入内容(上下文等)。

我的问题是,有没有办法告诉测试项目在测试运行开始时通过IIS Express启动Web项目?目前我只运行两个VS实例,其中一个实现调试的Web,另一个运行测试包

5 个答案:

答案 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)

如果您尝试调试测试和服务,请考虑执行此操作

  1. 启动以在Visual Studio中调试Web服务。
  2. 点击Debug - > Detach All。 IIS Express将继续运行。
  3. 设置断点并开始Debuging your Unit Test。
  4. (如果您不需要调试网络服务,请跳过此处)点击Debug - > Attach to Process。查找iisexpress.exe并附上。
  5. 但是,您丢失了已分离的Web服务上的“编辑并继续”。

答案 3 :(得分:0)

通过CTRL-F5在非调试版本中运行Web服务或站点使它独立于Visual Studio运行,并且您可以从VS内部自由运行测试

答案 4 :(得分:0)

我知道已经晚了,但是我使用了以下解决方案:

启动两个Visual Studio实例。在一个VS中开始调试API,然后在另一个VS中调试测试。