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

kei*_*en7 5 visual-studio asp.net-web-api

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

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

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

fjc*_*997 5

如果您尝试同时调试测试和服务,请考虑这样做

  1. 启动以在 Visual Studio 中调试 Web 服务。
  2. 单击Debug-> Detach All。IIS Express 将继续运行。
  3. 设置断点并开始调试您的单元测试。
  4. (如果不需要调试 Web 服务,请跳过此步骤) 单击Debug-> Attach to Process。查找iisexpress.exe并附加。

但是,您在分离的 Web 服务上丢失了“编辑并继续”。


You*_*oui 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服务

希望有帮助。