在没有调试的情况下运行 ASP.NET Core 项目后运行测试在运行测试之前停止运行项目

Running tests after running a ASP.NET Core project without debugging stops running project before running tests

这可能是 Visual Studio for Mac 中不存在的一项功能,但我想我可能会在这里询问我是否做错了什么。

我有一个 ASP.NET Core MVC 项目设置为启动项目。

我还有一组针对 .NET Core 2.0 的单元测试,它们使用 Selenium 来驱动 UI 测试。为了运行这些测试,我需要先运行 ASP.NET Core MVC,然后测试才能运行,否则它们会因为应用程序没有运行而失败。

在 Visual Studio 的 PC 版本中,"调试"菜单中的"启动而不调试"选项按预期启动 Web 应用程序。我的浏览器打开我的应用程序。一旦我确认它正在运行,我就可以毫无问题地运行测试(通过测试资源管理器)。

在 Mac 版本的 Visual Studio 中,"调试"菜单中的"启动而不调试"选项按预期启动 Web 应用程序。我的浏览器打开我的应用程序。一旦我确认它正在运行,我就会尝试运行测试。测试确实运行,但在运行之前,它会终止正在运行的应用程序进程。由于应用程序不再运行,测试失败。

TL;DR:

我的解决方案:

  • ASP.NET Core MVC 项目
  • 使用 Selenium 的 .NET Core 单元测试项目

以下是两个 VS 实例的步骤:

  • 单击"调试"(PC)或"运行"(Mac)
  • 点击"不调试启动"
  • 等待应用程序显示在浏览器中(不要关闭它)
  • 转到测试资源管理器 (PC) 或单元测试 (Mac)
  • 运行 UI 测试套件

预期:PC 和 Mac 版本均通过测试

实际:Mac 版本中的测试失败,因为在运行测试之前 Web 应用程序进程被终止

有人对我如何实现我想要实现的目标有任何建议吗?


查看 Visual Studio Mac 源代码,有一个限制阻止了这一点。 Visual Studio for Mac 会跟踪它已运行的所有应用程序,当您尝试运行单元测试时,它将尝试关闭这些应用程序。

使用 Visual Studio for Mac 7.1 对此进行测试,当您运行测试时,会显示一个消息对话框 An application is already running and will have to be stopped. Do you want to continue?

在不更改代码的情况下,您只能解决此问题。

解决方法:

  • 运行一个单独的 Visual Studio for Mac 实例并使用一个实例来启动您的 Web 应用程序,另一个来运行测试。
  • 在测试运行时从测试本身启动 Web 应用程序。
  • 创建运行 Web 项目和单元测试项目的运行配置。但是,您需要在单元测试中添加某种延迟,因为它们将与 Web 项目同时启动。
  • 有关选项 3 的更多详细信息。要创建运行配置,请右键单击解决方案并选择选项。然后在解决方案选项的运行 - 配置部分创建一个运行配置。然后选中它并检查web项目和单元测试项目。在状态栏中,您将需要运行配置。如果您可以在 Visual Studio for Mac 中运行单元测试项目,这应该可以工作。可以将使用 NUnit 的单元测试项目设置为启动项目,运行它将运行测试。