资讯动态

如何在 coreutils 中用 feature 标志指定测试工具并用 cargo nextest 加速测试?

发布时间:2026/9/13 6:07:03 来源:尧图企业网站定制
如何在 coreutils 中用 feature 标志指定测试工具并用 cargo nextest 加速测试【免费下载链接】coreutilsCross-platform Rust rewrite of the GNU coreutils项目地址: https://gitcode.com/GitHub_Trending/co/coreutils在开发 coreutilsuutils 项目即 GNU coreutils 的 Rust 重写版时提交代码前需要在本地跑一遍测试。完整测试套件耗时较长而 DEVELOPMENT.md 给出的做法是用 Cargo feature 标志精确指定要测试哪些工具或者在 CI 同款方式下用cargo nextest加速完整测试运行在多核 CPU 上可以显著缩短整个测试运行的时间。本文覆盖这两条路径先讲如何用 feature 标志圈定测试范围再讲如何安装并运行cargo nextest最后给出可选的 GNU Make 封装方式。准备条件以下准备工作来自 DEVELOPMENT.md 的 “Before you start” 与 “Tools” 小节将仓库 clone 到本地开发环境并进入目录git clone https://github.com/YOUR-GITHUB-ACCOUNT/coreutils cd coreutilsYOUR-GITHUB-ACCOUNT替换为你自己的 fork 账户名。安装 Rust 工具链。文档建议按 Rust 官方安装方式完成若使用 rustupclippy和rustfmt通常已一并安装。如果要用cargo nextest需先单独安装 nextest文档指向 nextest 官方安装说明此处不重复给出安装命令。如果走 GNU Make 路径需要makeGNU Make。用 feature 标志指定要测试的工具cargo test默认只运行 common programs对应 Cargo.toml 中defaultfeature 依赖的feat_common_core集合。要扩大或缩小范围使用--features运行包含平台特定测试的完整集cargo test --features unix只测少数几个工具文档给出的示例命令直接可用cargo test --features chmod mv tail --no-default-features其中chmod、mv、tail对应 Cargo.toml 中定义的同名 feature每个工具名都是一个可选依赖 feature--no-default-features保证只编译列出的这几个工具。你可以把参数替换成自己正在改动的其他工具名。如果还要测试核心库本身uucore和coreutilscargo test -p uucore -p coreutils # or cargo test --all-features -p uucore用 cargo nextest 加速完整测试完整测试套件跑完需要较长时间。项目在 CI 中使用 nextest——注意这里只是文档原文提到的工具名称——本地也可以同样使用多核 CPU 下能明显提速cargo nextest run --features unix --no-fail-fast该命令是 DEVELOPMENT.md 文档中的原样示例--features unix覆盖全部可用工具--no-fail-fast是文档示例中附带的参数。可选路径通过 GNU Make 的 nextest 目标限定工具范围GNUmakefile 定义了nextest目标其实现是nextest: ${CARGO} nextest run ${CARGOFLAGS} --features $(TESTS) $(TEST_SPEC_FEATURE) $(PROFILE_CMD) --no-default-features $(TEST_NO_FAIL_FAST)即它接受与默认test目标相同的参数并允许通过CARGOFLAGS把参数透传给nextest run。文档给出的用法make CARGOFLAGS--no-fail-fast UTILSUTILITY_1 UTILITY_2 nextestUTILITY_1、UTILITY_2是占位符替换成真实的工具名如chmod、tail。Makefile 会把UTILS过滤为实际存在的工具TESTS : $(sort $(filter $(UTILS),$(PROGS) $(SELINUX_PROGS)))再作为 feature 列表传给nextest run因此只有你列出的工具会被测试。若设置SPECy目标还会附加--no-fail-fast并启用test_unimplementedfeature用于包含未实现行为的测试。结果验证与失败时怎么办验证方式就是测试命令本身的运行结果命令正常结束、测试用例无失败即通过。文档没有给出固定的成功日志样例因此以退出状态为准即可。如果某个用例失败文档提供了一个进入调试器的路径示例以ls为例行号可按你实际断点替换rust-gdb --args target/debug/coreutils ls (gdb) b ls.rs:79 (gdb) run限制说明cargo nextest要求先安装 nextest未安装时该命令不可用。feature 名称必须是 Cargo.toml 中已定义的工具名如chmod、mv、tail或 feature 集合名如unix拼错或未定义的 feature 不会生效为工具选择。UTILS的 GNU Make 路径依赖make与仓库中的 GNUmakefileBusyBox 测试make busytest仅在类 Unix 系统可用与本文的 nextest 路径无关。更多本地开发环境配置、GNU 测试套件对比等内容见 DEVELOPMENT.md贡献规范见 CONTRIBUTING.md。【免费下载链接】coreutilsCross-platform Rust rewrite of the GNU coreutils项目地址: https://gitcode.com/GitHub_Trending/co/coreutils创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价