当我想测试C++覆盖率时,我可以用-fprofile-arcs -ftest-coverage构建我的程序,运行所有测试,并运行gcov以获得覆盖范围。
然而,说到铁锈,我完全迷失了方向。我想要做的是运行以下测试(在我的Mac上),并获得路径components/raftstore中所有锈蚀代码的覆盖率
cargo test --package tests --test failpoints cases::test_normal
cargo test --package tests --test failpoints cases::test_bootstrap
cargo test --package tests --test failpoints cases::test_compact_log在这个职位中,它说首先运行cargo test --no-run,然后运行kcov。然而,当我这样做的时候,kcov就会永远阻塞。
然后我是找到一个叫做 cargo kcov,他提供--test。但是,当我像在cargo kcov --test failpoints cases::test_normal中一样运行cargo test时,会出现错误
error: cargo subcommand failure
note: cargo test exited with code exit status: 101
error: no test target named `failpoints`我已经尝试了很多方法来解决这个问题,但是,这些方法都没有用,所以我想知道我能否在这里得到一些帮助。
我知道还有其他的覆盖工具,如tarpaulin和grcov,我目前正在尝试这些工具。如果使用这些覆盖工具有简洁的解决方案,也是可以接受的。,但是,我仍然想知道kcov和cargo-kcov到底出了什么问题。
发布于 2022-11-04 12:16:07
根据锈蚀文档的说法,现在可以获得基于检测的代码覆盖率。
下面的命令生成覆盖率结果。注意,它需要锈蚀分析器运行时,默认情况下它包括在nightly中。
RUSTFLAGS="-C instrument-coverage" \
cargo test --tests这些结果可能包括损坏的符号名,这些名称可以与铁锈一起使用。
cargo install rustfilt在使用此设置运行测试之后,应该有一个或多个.profraw文件。如果有多个,则可以将它们合并:
$ llvm-profdata merge -sparse default_*.profraw -o your_crate.profdata然后可以用cov cov显示覆盖率信息,例如,如本节中所描述的(替换机箱和测试二进制文件的名称)。
如果rustc和的LLVM版本重新部署,可能会出现问题。正如这里所指出的,llvm cov不匹配。
这个答案基于生锈书的这一节,它提供了关于代码覆盖率的更多信息。
https://stackoverflow.com/questions/69491669
复制相似问题