cal*_*vin 13 unit-testing code-coverage rust rust-cargo kcov
当我想测试 C++ 覆盖率时,我可以使用 构建我的程序-fprofile-arcs -ftest-coverage,运行所有测试,然后运行gcov以获得覆盖率。
然而,当谈到 Rust 时,我完全迷失了。我想要做的是运行以下测试(在我的 Mac 上),并覆盖路径中的所有 Rust 代码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
Run Code Online (Sandbox Code Playgroud)
从这篇文章来看,它说先运行cargo test --no-run,然后运行kcov。然而,当我真正这样做时,kcov 会永远阻塞。
然后我找到了一个叫“谁提供”的东西 。但是,当我像我所做的那样运行时,我收到错误cargo kcov--testcargo kcov --test failpoints cases::test_normalcargo test
error: cargo subcommand failure
note: cargo test exited with code exit status: 101
error: no test target named `failpoints`
Run Code Online (Sandbox Code Playgroud)
我尝试了很多方法来解决这个问题,但是没有一个有效,所以我想知道我是否可以在这里得到一些帮助。
我知道还有其他覆盖工具,例如tarpaulin和grcov,我目前正在尝试这些工具。如果这些覆盖工具有简洁的解决方案,也是可以接受的。不过kcov,我还是想知道and有什么问题cargo-kcov。
Jim*_*Jim 10
我喜欢使用防水布来输出 HTML。
cargo tarpaulin --out Html
Run Code Online (Sandbox Code Playgroud)
这应该创建一个名为 的输出文件tarpaulin-report.html。在浏览器中打开此文件以查看代码覆盖率报告。
根据rustc 文档,现在可以获得基于检测的代码覆盖率。
以下命令生成覆盖结果。请注意,它需要 Rust 分析器运行时,默认情况下包含在nightly.
RUSTFLAGS="-C instrument-coverage" \
cargo test --tests
Run Code Online (Sandbox Code Playgroud)
这些结果可能包括损坏的符号名称,可以使用rustfilt解决:
cargo install rustfilt
Run Code Online (Sandbox Code Playgroud)
使用此设置运行测试后,应该会出现一个或多个.profraw文件。如果有多个,可以合并:
$ llvm-profdata merge -sparse default_*.profraw -o your_crate.profdata
Run Code Online (Sandbox Code Playgroud)
然后可以使用llvm-cov显示覆盖范围信息,例如本节中所述(替换您的板条箱和测试二进制文件的名称)。
如果 rustc 和 llvm-profdata 的 LLVM 版本分别可能存在问题。llvm-cov 不匹配,如此处所述。
这个答案基于rustc 书的这一部分,它提供了有关代码覆盖率的更多信息。
| 归档时间: |
|
| 查看次数: |
6760 次 |
| 最近记录: |