在测试执行中使用热重载

Visual Studio 中的测试运行涉及生成项目以在使用 测试平台 执行测试之前更新磁盘上的二进制文件。 Visual Studio 内部的生成时间可能会有所不同,具体取决于对代码所做的更改 类型 。 对于更大的解决方案,生成可能是测试运行中最昂贵的部分。

在 Visual Studio 2022 及更高版本中,可以通过跳过受支持的方案的生成来启用热重载的测试执行,从而加快测试执行速度。

支持哪些内容?

  • 面向 .NET 6.0 及更高版本的 C# 和 VB 项目
  • 为 DEBUG 配置生成的测试项目
  • Visual Studio 2022 及更高版本

利用热重载来启用测试执行

可以在 “工具>选项 ”窗格中启用此功能。 展开所有设置>部分,然后选择(实验性)为面向 .NET 6 及更高版本的 C# 和 VB 测试项目启用热重载测试运行

显示如何在 Visual Studio 中选择“启用热重载测试运行”选项的屏幕截图。

可以在 “工具>选项 ”对话框中启用此功能。 展开 测试>常规 部分,并选择 (实验性)为面向 .NET 6 及更高版本的 C# 和 VB 测试项目启用热重载测试运行 复选框。

显示如何在 Visual Studio 中选择“启用热重载测试运行”选项的屏幕截图。

为什么是实验性的?

此功能为测试执行提供了一种新方法,用于更改验证代码的广泛使用路径。 随着我们继续收到反馈,此功能的用户体验可能会发生变化。 出于这些原因,该功能当前标记为“实验性”。

工作原理

启用该选项后,测试资源管理器会在可能的情况下自动使用热重载执行测试。 如果热重载不可行,系统将回退到常规的生成和运行测试行为。 作为运行测试的用户,无需对工作流进行任何更改(即,继续编辑代码并运行测试)。

在后台,我们使用与新发布的用于在运行时编辑 C#/VB 代码的热重载体验中相同的编辑并继续基础结构,以确定所做的更改。 因此,仅当没有“不当编辑”时,我们才会热重载。在这种情况下,我们会在执行测试之前重新生成测试。 有关支持的编辑的更多详细信息,请阅读 “编辑并继续”文档

测试执行的速度要快多少?

估算此功能节省的时间时,有许多变量可以发挥作用。 例如:

  • 项目生成需要多长时间。
  • 进行了什么样的编辑。
  • 编辑所在文件的大小。
  • 编辑所在的位置(是否为叶子项目)。

最终,速度改进与在特定测试运行中本会发生的构建时间直接相关。

注释

  • 启用该选项或打开 Visual Studio 后的第一个测试将触发项目生成。

  • 运行测试时,可能无法保存编辑器中的文件。 若要解决这些问题,并在签入之前,请确保执行完整生成(Ctrl+Shift+B)。

  • 发生热重载测试执行时,磁盘上的二进制文件不会更新。

  • 热重载的测试执行不适用于测试资源管理器中的“测试>运行所有测试”和“在视图中运行所有测试”,也不适用于解决方案资源管理器中解决方案节点的“运行所有测试”。 此功能不适用于这些命令,因为它们当前保证生成整个解决方案。

  • 当运行不受支持的目标框架(低于 .NET 6.0)的测试时,项目构建将会开始。

  • 如果在磁盘上显示的内容与测试资源管理器显示的内容之间出现任何不一致,请尝试使用 Ctrl + Shift + B 键盘快捷方式生成解决方案/项目,然后运行测试。 任何明确的构建会将热重载测试结果替换为常规的完整构建测试结果。

已知问题

在以下情况下,不会发生使用热重载的测试执行:

  • 代码覆盖率
  • Live Unit Testing
  • 分析
  • 调试

由于存在不可读令牌,堆栈跟踪可能无法读取。 此问题将在 此处 跟踪,并计划在 .NET 7.0 中修复。

  • 在这种情况下,建议的解决方法是生成项目并重新运行测试。

你的反馈很重要

要完成此实验性功能,我们需要你的反馈。 如果你有改进体验或遇到任何问题的建议,请花点时间提供输入。 只有提供反馈,我们才能确保解决问题,并根据输入确定未来决策的优先级。

若要发送反馈,请使用 Visual Studio 反馈机制