如何让cargo test的测试结果按名称字母顺序排序?
问题描述
我用cargo test运行Rust测试时,发现测试结果的输出顺序每次都不一样,看起来是随机的。比如当前的输出是:
test node::tests::start_node::get_value_start ... ok test node::tests::start_node::get_value ... ok test node::tests::start_node::set_value ... ok test node::tests::main_node::test_new ... ok test main_tests::run_checks ... ok test node::tests::start_node::test_new ... ok test sigmoid::tests::sig_deriv_f32 ... ok test sigmoid::tests::sig_deriv_inf::test_f32 ... ok test sigmoid::tests::sig_deriv_inf::test_f64 ... ok test training_data::tests::iter_chunks ... ok test training_data::tests::get_chunks ... ok test sigmoid::tests::sig_inf::test_f64 ... ok test sigmoid::tests::sig_f32 ... ok test sigmoid::tests::sig_inf::test_f32 ... ok test sigmoid::tests::sig_deriv_f64 ... ok test sigmoid::tests::sig_f64 ... ok
我希望能让测试结果按字母顺序输出,类似这样:
test main_tests::run_checks ... ok test node::tests::main_node::test_new ... ok test node::tests::start_node::get_value_start ... ok test node::tests::start_node::get_value ... ok test node::tests::start_node::set_value ... ok test node::tests::start_node::test_new ... ok test sigmoid::tests::sig_deriv_f32 ... ok test sigmoid::tests::sig_deriv_f64 ... ok test sigmoid::tests::sig_deriv_inf::test_f32 ... ok test sigmoid::tests::sig_deriv_inf::test_f64 ... ok test sigmoid::tests::sig_f32 ... ok test sigmoid::tests::sig_f64 ... ok test sigmoid::tests::sig_inf::test_f32 ... ok test sigmoid::tests::sig_inf::test_f64 ... ok test training_data::tests::iter_chunks ... ok test training_data::tests::get_chunks ... ok
请问有没有办法实现这个需求?
解决办法
有两种实用方式可以让cargo test的输出按字母顺序排列:
1. 强制单线程运行测试
直接执行以下命令:
cargo test -- --test-threads=1
--test-threads=1会强制测试在单线程环境下运行,此时测试会按字母顺序执行并输出结果。如果需要保留测试函数内部的打印内容,可以加上--nocapture参数:
cargo test -- --nocapture --test-threads=1
2. 使用内置排序参数(Rust 1.64+)
从Rust 1.64版本开始,cargo test支持直接指定排序规则的参数,执行命令:
cargo test -- --sort alphabetical
这个参数会在所有测试完成后,统一按字母顺序整理输出结果,无需强制单线程,效率更高。
如果想默认启用该行为,可以在项目根目录的.cargo/config.toml中添加配置:
[test] sort = "alphabetical"
之后每次执行cargo test都会自动按字母顺序输出测试结果。
内容的提问来源于stack exchange,提问作者MarcellPerger
相关产品推荐
相关产品推荐

