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

7

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

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

我的问题是,是否有一种方法可以告诉测试项目在测试运行开始时通过IIS Express启动Web项目?目前,我只能运行两个实例的VS,一个带有已启动调试的Web项目,另一个运行测试包。


我强烈建议您使用HttpClient来进行单元测试,而不是使用RESTSharp。 - Darrel Miller
使用RestSharp是因为我们在iOS和Android(通过mono)客户端上使用它。 - keithwarren7
我理解,但这只是HTTP的问题,无论您使用HttpClient还是RESTSharp,服务器应该都会表现相同。使用HttpClient的好处是所有单元测试都可以在没有任何网络流量的情况下运行。 - Darrel Miller
5个回答

6
如果你需要同时调试测试和服务,可以考虑以下做法:
  1. 在 Visual Studio 中启动并调试 Web 服务。
  2. 点击“调试”->“全部分离”。IIS Express 将继续运行。
  3. 设置断点并开始调试单元测试。
  4. (如果不需要调试 Web 服务,则跳过此步骤) 点击“调试”->“附加到进程”。找到“iisexpress.exe”并附加。
但是,您将失去已经分离的 Web 服务上的“编辑和继续”功能。

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服务的博客文章,可能会有所帮助 - https://learn.microsoft.com/en-us/archive/blogs/youssefm/writing-tests-for-an-asp-net-web-api-service
希望这有所帮助。

3

通过使用CTRL-F5在发布非调试模式下运行您的 Web 服务或站点,使其独立于 Visual Studio 运行,并且您可以自由地从 VS 内部运行测试。


3

我知道这是一篇旧文章,但我刚刚面临了这个问题。如果有人阅读这篇文章,我可以提供更详细的回复。

简而言之,我创建了一个控制台应用程序,引用了单元测试程序集,通过反射和简单的菜单系统,您可以运行任何一个测试。

然后,我设置了多个启动项目,分别为Web项目和控制台项目。

我现在可以在同一个会话中调试单元测试和Web项目了。不需要附加到多个解决方案的进程。


1
这很好,但我应该能够从单元测试资源管理器中对Web项目进行单元测试。 - SpoiledTechie.com

0
我知道这有点晚了,但我使用了以下解决方案:
在两个Visual Studios实例中启动。在一个VS中调试API,然后在另一个VS中调试测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接