【问题标题】:How to run a test at the same time a web project is being debugged?如何在调试 Web 项目的同时运行测试?
【发布时间】:2012-08-30 19:30:49
【问题描述】:

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

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

Debugging While Running on ASP.NET Development Server 似乎不适用于 VS2012,或者至少我无法让它工作。

【问题讨论】:

  • @Robert,我认为标签不应包含在问题中。此外,问题是关于“如何在调试 Web 项目的同时运行测试”而不是断点的功能。在 VS2012 中根本无法运行测试。
  • 这就是我问这个问题的原因。如果调试器正在运行并且正在调试 Web 项目,我们将无法运行测试。 TEST->Run 和 TEST->Debug 下的所有菜单都被禁用。在 VS2010 中情况并非如此。我们已经在多台机器和多个项目上进行了尝试(转换为 VS2012)。
  • 在制作标题时,我会考虑它在 Google 中的外观。由于最流行的标签(在本例中为 ASP.NET)在 Google 中被附加到标题的开头,所以在标题的开头添加标签根本没有意义。但是,标签可以“自然地”出现在标题的中间或末尾,如果它使 Google 的标题更好的话。
  • 对于您的问题,您最好的做法可能是解耦您的类,以便可以独立于您的 ASP.NET 应用程序在它们上运行单元测试。 Visual Studio 正确地认为,当您运行应用程序时,这就是测试。
  • 嗯,我们有几个这样的项目,我们才刚刚开始将它们转换为 VS2012。由于它在 VS2010 中工作(正确或错误的方式),我们希望它在 VS2012 中也能以相同的方式工作。

标签: asp.net visual-studio visual-studio-2012


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这里是调试单个单元测试和 Web 服务器的解决方法。它依赖于Debugging Multiple Processes(不包括MSVS Express):

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 这是个好主意。不幸的是,当我尝试您的插件时,它无法加载错误号 80004005。这是 VS 2012 Ultimate,更新 2。
        • 感谢您的努力。我按照这些说明 (stackoverflow.com/questions/21662223/…) 让它在 VS 2013 社区中运行。对我来说没有错误消息,但是当使用“在上下文中运行所有测试”选项时 VS 要求停止调试,并且不运行测试。
        【解决方案5】:

        试试这个:

        1. 在单元测试方法的第一行放置一个断点。
        2. 开始调试您的单元测试。
        3. 在单元测试的第一行运行后,启动您需要运行的其他项目的新实例。

        【讨论】:

        • 在 VStudio 2013 中,我按照你说的做了,有点不同,先调试测试,然后附加到进程,但实际上是一样的。
        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-24
          • 2018-01-10
          • 2020-11-04
          • 2011-09-27
          • 1970-01-01
          • 1970-01-01
          • 2020-01-30
          相关资源
          最近更新 更多