如何在一个解决方案中调试/unit testingwebAPi

有没有办法在一个vs解决方案中进行unit testing或调试web api? 我正在使用HttpClient来使用WebAPI并且有两个VS实例来执行此操作。

在1 VS实例中我有unit testing,在第二个vs实例中我有在localhost中运行的webapi。

有一个更好的方法吗?

unit testing的首选方法是引用WebAPI项目吗?

我想使用httpClient来使用它,而不必在UnitTest项目中引用它。

所以在我的UnitTest方法中,它的baseAddress为“ http:// localhost:1234 ”

这将是托管从同一解决方案启动的WebAPI的地方。

我正在调试的当前方式要求我启动第二个Visual Studio实例,其中加载了相同的解决方案并且有一个运行WebAPI项目,而另一个Visual Studio运行unit testing项目。

所以一位同事和我刚试过建议的答案都无济于事。 但是,我们实际上已经找到了一个解决方案,通过在测试的调试模式下附加到IIS进程,可以很好地解决这个问题。 以下是步骤:

  1. 确保您的unit testing项目和Web API项目在同一解决方案中。
  2. 确保您的解决方案在属性部分中设置为单启动(即保留为默认值)。
  3. 在要调试的控制器方法中向端点添加断点。
  4. 在测试中添加要调试的断点,然后右键单击并单击“调试测试”(或使用您喜欢的测试运行器,如ReSharper进行调试)。
  5. 断点点击后,单击Debug | 附加到流程……
  6. 找到并单击给定服务的本地IIS进程,然后单击Attach
  7. 继续调试并观察服务中的断点

为了方便起见,我们下载了一个自动附加到IIS的扩展程序,它在“工具”菜单中为我们提供了一个菜单栏项。

为了方便起见,我们自定义了工具栏部分,将menubar命令添加到工具栏中,以便只需单击一下即可附加到IIS。

  1. 开始调试unit testing
  2. 在测试代​​码的第一行或调用本地Web api项目之前
  3. 右键单击您的web api项目,然后单击Debug> Start new instance

正如Daniel Mann所说,这不是unit testing。 这是集成测试。 您正在运行整个项目并测试所有内容。

如果要对webapi控制器进行unit testing,只需将unit testing项目添加到webapi项目并创建unit testing。 您希望一次只关注一个类。 模拟/伪造该类的任何依赖项。

这是微软的一个很好的例子http://www.asp.net/web-api/overview/testing-and-debugging/unit-testing-with-aspnet-web-api

但是,如果您正在寻找的是在单一解决方案中运行测试。 只需将两个项目放在同一个解决方案中。 右键单击解决方案资源管理器中的解决方案。 选择“设置启动项目”。 选择“多个启动项目”并选择要同时启动的项目。

您可以像迈克提到的那样自我托管网络API

var config = new HttpSelfHostConfiguration("http://localhost:8080"); config.Routes.MapHttpRoute( "API Default", "api/{controller}/{id}", new { id = RouteParameter.Optional }); using (HttpSelfHostServer server = new HttpSelfHostServer(config)) { server.OpenAsync().Wait(); Console.WriteLine("Press Enter to quit."); Console.ReadLine(); } 

有关详细信息, 请访问http://www.asp.net/web-api/overview/older-versions/self-host-a-web-api

您可以在初始化unit testing套件时启动托管,并在清理测试套件时关闭。

如果您有一个API项目,并且您为API创建了一个端到端的unit testing项目(意味着您正在使用HttpClient,WebClient或其他http客户端包装器直接测试API),则必须启用“多个启动项目”在解决方案上。 按照以下步骤:

  1. 右键单击解决方案文件并选择属性。
  2. 选择“多个启动项目”单选按钮。
  3. 在web api项目和unit testing项目的下拉列表中选择“开始”操作。
  4. F5以调试模式启动。
  5. 您将收到一个错误对话框,指出“无法直接启动带有输出类型类库的项目”。 这很好,因为unit testing项目只是一个类库(不是可执行文件,因此没有main / start方法)。 只需单击“确定”对话框即可。
  6. 在要测试的unit testing方法上,右键单击并选择“Debug Unit Tests”以开始调试。

在当前版本的ASP.Net Core中,官方解决方案是使用Microsoft.AspNetCore.TestHost Nuget程序集,该程序集在测试项目中创建托管Web项目的模拟Web服务器。

有关使用的详细信息,请访问: https : //docs.microsoft.com/en-us/aspnet/core/testing/integration-testing

一方面它感觉有点像软糖,因为如果没有涉及真正的Web服务器,它的真正集成测试定义是什么,另一方面,一旦你设置它,它至少可以无缝地工作。