26

在一些解决方案中,我们有 ASP.NET/WCF Web 项目和一个测试项目。一些测试使用http://localhost:port/.... 在 VS2010 中,当调试 ASP.NET/WCF web 项目时,测试运行器可以运行测试,如果 web 项目中有任何断点,调试器将中断执行。这似乎已在 VS2012 中被禁用/删除。

调试 ASP.NET/WCF Web 项目时(通过按 F5 或通过附加进程启动),TEST->Run 和 TEST->Debug 子菜单都被禁用。在 VS2010 中,只有 Test->Debug 子菜单被禁用,而 Test->Run 子菜单仍然被启用。我们使用这种方式来轻松调试 Web 项目中的服务。有什么方法可以恢复这种行为或解决方法?

在 ASP.NET 开发服务器上运行时进行调试似乎不适用于 VS2012,或者至少我无法让它工作。

4

6 回答 6

14

在 VS2013 中情况是一样的:当项目正在运行/调试时,运行/调试测试的选项是灰色的。这是一种耻辱,尤其是对于像 Web API 这样的项目,通过 HTTP 调用 API 的测试(而不是创建 Controller 类的实例并规避任何网络流量)非常有用,因为它们更接近 API 的最终用户会体验。

作为一种解决方法,您可以在单独的 VS 实例中打开相同的解决方案,或者使用相同的项目创建单独的解决方案,专门用于测试。在第一个 VS 实例中调试,在第二个实例中运行测试。

于 2015-01-16T16:10:42.877 回答
7

如果您有一个包含 WCF 应用程序和调用它们的测试的解决方案,您可以通过调用Debug All TestsDebug Selected Tests来调试使用这些测试的应用程序,而无需先前的Start Debugging (F5)

将您的解决方案配置为Multiple Startup Projects并在所有操作中设置None并将您的 WCF 应用程序配置为启动操作不要打开页面。等待请求。使用此配置,如果您选择Debug All TestsDebug Selected Tests ,开发 Web 服务器将启动。

于 2013-01-17T17:06:32.320 回答
5

这是调试单个单元测试以及 Web 服务器的解决方法。它依赖于调试多个进程(不包括 MSVS Express):

  1. 启动 Web 服务器(非调试),记下它的进程 ID(IIsExpress 图标 -> 显示所有应用程序)
  2. 在测试的第一行放置一个断点
  3. 开始调试单元测试,等待它在断点处停止。
  4. 调试 -> 附加到进程,输入 Web 服务器进程 ID

测试和服务器都在调试器中实时运行。

于 2017-04-21T03:09:59.237 回答
3

我最终写了一个快速插件。事实证明,与 VS2012 一样,VS2012 测试运行器也可以在调试 Web 项目时运行测试。只是菜单选项被禁用。

于 2012-10-30T22:09:01.123 回答
2

试试这个:

  1. 在单元测试方法的第一行放置一个断点。
  2. 开始调试您的单元测试。
  3. 一旦它在您的单元测试中到达第一行,启动您需要运行的其他项目的新实例。
于 2019-04-10T18:59:00.083 回答
0

这不是一个很好的解决方案,但它有效。使用 Azure DevOps TFS 版本控制,创建当前项目的分支。在 Visual Studio 的另一个实例中的另一个分支中打开您的项目的解决方案,同时您的主项目在 Visual Studio 的第一个/原始实例中运行。然后,在您的第一个/主 Visual Studio 实例中运行您的 Web 项目。现在,从 Visual Studio 的其他实例运行单元测试。瞧。

为了使它们保持同步,您可以从一个分支合并到另一个分支。

于 2020-04-20T02:19:39.940 回答