在运行ASP.NET Core项目之后运行测试而不进行调试会在运行测试之前停止运行项目

问题描述:

这可能是Visual Studio for Mac中不存在的功能,但我想我可能会问这里是否是我做错事。在运行ASP.NET Core项目之后运行测试而不进行调试会在运行测试之前停止运行项目

我有一个ASP.NET Core MVC项目集作为启动项目。

我也有一套针对.NET Core 2.0的单元测试,它使用Selenium来驱动UI测试。为了运行这些测试,我需要在运行测试之前先运行ASP.NET Core MVC,否则它们会失败,因为应用程序没有运行。

在PC版的Visual Studio中,“Debug”菜单中的“Start without Debugging”选项按预期启动Web应用程序。我的浏览器打开我的应用程序。一旦我确认它正在运行,我就可以在没有任何问题的情况下运行测试(通过测试浏览器)。

在Mac版本的Visual Studio中,“Debug”菜单中的“Start without Debugging”选项按预期启动Web应用程序。我的浏览器打开我的应用程序。一旦我确认它正在运行,我尝试运行测试。测试确实运行,但在运行之前,它会杀死正在运行的应用程序进程。由于应用程序不再运行,测试失败。

TL; DR:

我的解决办法:使用Selenium

下面是步骤

  • ASP.NET MVC的核心项目
  • .NET核心单元测试项目在VS的两个实例上:

    • 单击“调试”(PC)或“运行”(苹果机)
    • 点击“开始不调试”
    • 等待应用程序在浏览器中显示出来(不要关闭它)
    • 转到测试资源管理器(PC)或单元测试(苹果机)
    • 运行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?

没有改变代码,你只能解决这个问题。

解决方法:

  1. 运行Visual Studio的一个单独的实例为Mac和使用一个启动您的Web应用程序和其他运行测试。
  2. 运行时从测试本身启动Web应用程序。
  3. 创建运行Web项目和单元测试项目的运行配置。但是,您需要在单元测试中添加某种延迟,因为它们将与Web项目同时开始。

有关选项3的更多详细信息。要创建运行配置,请右键单击该解决方案并选择选项。然后在解决方案选项中的Run - Configurations部分中创建一个运行配置。然后选择它并检查Web项目和单元测试项目。在状态栏中,您需要运行配置。如果您可以在Visual Studio for Mac中运行您的单元测试项目,这应该工作。使用NUnit的单元测试项目可以设置为启动项目并运行它将运行测试。