RustRover 2026.1 发布:集成 cargo-nextest 实现高效原生测试
在本次发布中,我们更加专注于通过优化核心工作流程以及在 IDE 中直接添加对 cargo-nextest 的原生支持,来提升日常开发体验。在大型 Rust 工作区中运行测试时,默认的测试运行程序可能会比较缓慢。许多团队依靠 Nextest 来实现更快、更具扩展性的执行,但在此之前,这意味着必须离开 IDE 并切换到终端。现在,您可以在“测试”(Test)工具窗口中运行并监控 Nextest 会话,获取完整的进度报告和结构化结果,而无需中断您的日常工作流程。
标准的 Rust 测试设置
正如《Rust 程序设计语言》中所述,Rust 提供了一个功能强大的内置框架,用于编写和运行测试。该生态系统围绕 #[test] 属性展开,该属性将函数标识为测试用例。开发人员通常使用 cargo test 命令来执行这些测试。
这种标准设置可以处理单元测试(与被测代码放在一起)、集成测试(在单独的 tests/ 目录中),甚至是注释中的文档测试。当 cargo-test 运行时,它会为 crate 编译一个测试二进制文件,执行所有标有 #[test] 属性的函数,然后报告它们是通过还是失败。
在 RustRover 中进行测试
RustRover 的测试集成旨在可视化环境中映射这种体验。它会解析代码中的测试函数和模块,并在其旁边添加装订线图标(gutter icons)以便快速执行。
当您运行测试时,RustRover 会使用标准的测试运行程序 UI。它将 cargo-test 的输出转换为“运行”(Run)或“调试”(Debug)工具窗口中的结构化树状视图,以便您更轻松地检查结果。在 IDE 上下文中,您可以过滤结果、跳转到失败的测试、查看每个测试用例的输出日志,并一键重新运行失败的测试。您可以在我们的文档中阅读更多信息。
cargo-nextest 的优势
虽然标准的 cargo-test 对许多项目来说运行良好,但在大型、复杂的项目中,它可能会暴露出扩展性问题。Nextest 是 Cargo 的一个替代测试运行程序,专为解决这些瓶颈并提供更快、更稳健的测试体验而构建。
“当我开始构建 cargo-nextest 时,目标是让大型 Rust 工作区的测试更快、更可靠。看到它被原生集成到 RustRover 中对我意义重大;我很高兴开发人员现在无需离开 IDE 就能受益于 Nextest 的功能集。感谢 JetBrains 团队深思熟虑的集成以及对该项目的支持!”
Oxide Computer 软件工程师,cargo-nextest(一款快速 Rust 测试运行程序)作者
切换到 cargo-nextest 的主要优势包括:
-
显著加快执行速度:Nextest 使用了不同的模型:它采用基于进程的模型并行执行测试,并将测试调度到所有可用的 CPU 核心上。这使得测试速度比
cargo test快 3 倍,在标准运行程序的开销变得显著的大型工作区中尤为明显。 -
识别不稳定的测试(Flaky tests):Nextest 内置了强大的功能来重试失败的测试。这有助于识别和缓解不稳定的测试(间歇性失败的测试),而无需中断整个测试套件。
-
预编译测试二进制文件:它将构建和运行阶段分离开来。这允许测试二进制文件进行预编译(例如在 CI 中),然后在多台机器或环境中执行。
-
可操作的输出:Nextest 提供结构化、彩色编码的输出,旨在突出关键信息。它通过对重试进行分组并提供汇总统计数据,简化了故障分析。
cargo-nextest 在 RustRover 中的实现
在 2026.1 版本中,我们将 cargo-nextest 直接集成到了 RustRover 现有的测试基础架构中。我们的目标是在不改变用户已有工作流程的情况下,带来 Nextest 的速度和灵活性。
无缝集成
该集成通过调整 RustRover 的测试运行程序,使其与 cargo-nextest CLI 进行通信(而非 cargo-test)来实现。以下是它在 RustRover 中的工作方式:
-
您现在可以在“运行/调试配置”(Run/Debug Configuration)中选择 Nextest 作为首选运行程序。RustRover 会自动检测您的环境中是否安装了
cargo-nextest并将其作为选项提供。 -
只要将其配置为运行程序,适用于标准测试的装订线图标和上下文菜单操作(
Run 'test::name')现在都会调用cargo-nextest。 -
我们还将 Nextest 的专业输出映射到了 RustRover 的标准测试运行程序 UI 上。这意味着您既能获得 Nextest 的性能优势,又能保留分层树状视图、故障过滤和集成输出日志,从而实现高效调试。
进度报告
我们还专注于充分利用 Nextest 的详细进度报告。当您的测试套件运行时,“测试”(Test)工具窗口会实时更新,显示每个测试的状态(排队、运行中、通过、失败或重试)。视觉反馈平滑且即时,因此您无需切换上下文即可随时查看测试运行的状态。
通过将原生的 cargo-nextest 支持引入 RustRover,我们希望提供一个能够随项目扩展的开发环境。大型 Rust 工作区需要高性能,而这种集成确保您无需牺牲 IDE 工作流程的生产力,即可使用一流的工具。
特别感谢
最后,我们要感谢 Rain,即 cargo-nextest 的作者。他们的工作通过使测试过程更快、更可靠,显著改善了 Rust 生态系统中的开发者体验。如果 cargo-nextest 已成为您工作流程中不可或缺的一部分,我们鼓励您支持该项目。您可以通过赞助该项目来为其持续开发做出贡献。