如何在一个解决方案中调试/单元测试webAPi

Arc*_*ian 14 c# unit-testing visual-studio asp.net-web-api2

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

在1 VS实例中我有单元测试,在第二个vs实例中我有在localhost中运行的webapi.

有一个更好的方法吗?

单元测试的首选方法是引用WebAPI项目吗?

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

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

这将是托管从同一解决方案启动的WebAPI的位置.

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

Bar*_*Alp 9

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


小智 5

因此,我和一位同事尝试了建议的答案,但没有成功。但是,实际上,我们已经找到了一种解决方案,该解决方案通过在测试中处于调试模式时将其附加到IIS进程中,就可以很好地工作。步骤如下:

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

为了更加轻松,我们下载了一个扩展以自动附加到IIS,该扩展在“工具”菜单中提供了一个菜单栏项。

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


Fra*_*ran 4

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

如果您想对 webapi 控制器进行单元测试,只需将单元测试项目添加到 webapi 项目并创建单元测试即可。您希望一次只专注于测试一个类。模拟/伪造该类的任何依赖项。

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

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