我有一个包含 WebAPI 项目和 VS 测试项目的解决方案。
我的测试通过 Url 使用 RestSharp 调用 API,而不是实例化控制器本身并注入东西(上下文等)。
我的问题,有没有办法告诉测试项目在测试运行开始时通过 IIS Express 启动 Web 项目?目前我只运行两个 VS 实例,一个带有已启动调试的 web 投影,另一个运行测试包
我有一个包含 WebAPI 项目和 VS 测试项目的解决方案。
我的测试通过 Url 使用 RestSharp 调用 API,而不是实例化控制器本身并注入东西(上下文等)。
我的问题,有没有办法告诉测试项目在测试运行开始时通过 IIS Express 启动 Web 项目?目前我只运行两个 VS 实例,一个带有已启动调试的 web 投影,另一个运行测试包
如果您尝试同时调试测试和服务,请考虑这样做
Debug
-> Detach All
。IIS Express 将继续运行。Debug
-> Attach to Process
。查找iisexpress.exe
并附加。但是,您在已分离的 Web 服务上丢失了“编辑并继续”。
我不建议使用网络对 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://docs.microsoft.com/en-us/archive/blogs/youssefm/writing-tests-for-an-asp-net-web- api服务
希望有帮助。
在非调试版本中运行您的 Web 服务或站点,CTRL-F5
使其独立于 Visual Studio 运行,您可以从 VS 内部自由运行测试
我知道这是一篇旧帖子,但我刚刚遇到了这个问题。如果/当有人读到这篇文章时,我可以提供更详细的回复。
简而言之..我创建了一个引用单元测试程序集的控制台应用程序,并通过反射和一个简单的菜单系统,您可以运行任何一个测试。
然后我将多个启动项目设置为 Web 项目和控制台项目。
然后我可以在同一个会话中按 F5 并调试单元测试和 Web 项目。无需附加到多个解决方案的过程。
我知道这已经很晚了,但我使用了这个解决方案:
启动两个 Visual Studio 实例。在一个 VS 中开始调试 API,然后在另一个 VS 中调试测试。