0

这可能是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应用程序过程是在测试运行前死亡

    有没有人有任何建议,我可以如何实现我想要实现的目标?

回答

1

看着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的单元测试项目可以设置为启动项目并运行它将运行测试。