本页面介绍了 ripgrep 中的测试基础设施,解释了如何运行现有测试以及如何为功能或错误修复编写新测试。有关从源代码构建 ripgrep 的信息,请参阅 从源代码构建。
Ripgrep 拥有一个强大的测试框架,可验证各种场景下的搜索功能。测试按类别组织在模块中,遵循创建测试文件、使用特定参数执行 ripgrep 并验证输出的一致模式。
测试框架由三个主要组件组成,它们协同工作以创建、运行和验证测试
rgtest! 宏ripgrep 测试框架的核心是 rgtest! 宏,它创建一个临时的测试环境,并提供用于运行和验证 ripgrep 命令的方法
此宏创建一个新测试,其中包含
Dir 结构创建的临时目录TestCommand 结构预配置的命令运行器来源: tests/macros.rs
Dir 结构The Dir 结构代表一个临时目录,并提供创建测试文件和目录的方法
来源: tests/util.rs
TestCommand 结构The TestCommand 结构封装了 ripgrep 的命令行界面用于测试
来源: tests/util.rs
ripgrep 中的测试遵循一致的模式
这是一个简单的例子
ripgrep 核心功能的测试,例如搜索功能、文件类型检测和输出格式。新功能应在此处进行测试。
来源: tests/feature.rs
验证已修复的错误不会再次出现。每个测试通常引用其所解决问题的编号
来源: tests/regression.rs594-607
处理二进制文件的测试,包括检测和过滤
来源: tests/binary.rs
ripgrep JSON 输出格式的测试
来源: tests/json.rs
多行搜索功能的测试
来源: tests/feature.rs
来源: tests/regression.rs615-649
您可以使用 Cargo 运行 ripgrep 的测试
在为 ripgrep 添加新测试时,请遵循以下指南
选择正确的模块:
feature.rsregression.rs遵循测试模式:
rgtest! 宏对于回归测试:
测试边缘情况:
确保测试是确定性的:
来源: CHANGELOG.md tests/regression.rs978-1037
当测试失败时,您可以通过运行以下命令获取更多详细信息:
这将显示完整的错误消息和堆栈跟踪,有助于确定失败的原因。
为了进行更详细的调试,您可以在测试中添加调试打印信息