在测试执行中使用热重载

Visual Studio 中的测试运行涉及生成项目以在使用 测试平台 执行测试之前更新磁盘上的二进制文件。 Visual Studio 内部的生成时间可能会有所不同,具体取决于对代码所做的更改 类型 。 对于更大的解决方案,生成可能是测试运行中最昂贵的部分。 在 Visual Studio 2022 及更高版本中,可以通过跳过受支持的方案的生成来启用热重载的测试执行,从而加快测试执行速度。

支持哪些内容?

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

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

通过选择“测试>选项>,启用此功能:(实验性)为面向 .NET 6 及更高版本的 C# 和 VB 测试项目启用热重载测试运行Visual Studio 测试选项页上的“启用热重载测试运行”按钮的屏幕截图。选择此项后,测试执行将使用热重载来支持的方案

为什么是实验性的?

这是测试执行的新方法,我们更改了验证代码的广泛使用路径。 我们还预计,随着收到来自用户的更多反馈,围绕此功能的用户体验会发生变化。 出于这两个原因,我们目前将此功能标记为“实验性”。

工作原理

启用此选项后,测试资源管理器将尽可能自动使用具有热重载的测试执行。 如果热重载无法实现,它将恢复至正常的构建和运行测试流程。 作为运行测试的用户,无需对工作流进行任何更改(即,继续编辑代码并运行测试)。

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

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

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

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

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

注释

  • 启用选项或打开 Visual Studio 后的第一个测试运行将产生项目生成。
  • 运行测试时,编辑器中的文件可能无法保存。 若要解决这些问题,并在签入之前,请确保执行完整生成(Ctrl+Shift+B)。
  • 发生热重载测试执行时,磁盘上的二进制文件不会更新。
  • 热重载的测试执行不适用于测试资源管理器中的“测试>运行所有测试”、“在视图中运行所有测试”,也不适用于解决方案资源管理器中的解决方案节点 运行所有测试 。 此功能不适用于这些命令,因为它们当前保证生成整个解决方案。
  • 当运行不受支持的目标框架(低于 .NET 6.0)的测试时,项目构建将会开始。
  • 如果在磁盘上显示的内容与测试资源管理器显示的内容之间出现任何不一致,请考虑使用 Ctrl+Shift+B 生成解决方案/项目生成,然后运行测试。 任何明确的构建会将热重载测试结果替换为常规的完整构建测试结果。

已知问题

  • 在以下情况下,不会发生使用热重载的测试执行:
    • 代码覆盖率
    • 实时单元测试
    • 分析
    • 调试
  • 堆栈跟踪在存在不可读令牌的情况下可能无法读取。 此问题正在此处跟踪,并计划在 .NET 7.0 中修复。
    • 在这种情况下,建议的解决方法是生成项目并重新运行测试。

你的反馈很重要

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

若要联系我们,请使用 Visual Studio 反馈机制