当我想测试 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) 我试图使用kcov来获取Rust库的代码覆盖率.我已经按照本教程构建和使用kcov.报道似乎有效,但我面临着一个奇怪的高覆盖率.项目中的某些文件获得100%的覆盖率,即使它们实际上根本没有被覆盖!
这是一个重现问题的最小项目:
Cargo.toml
[package]
name = "mypackage"
version = "0.1.0"
authors = ["mbrt"]
Run Code Online (Sandbox Code Playgroud)
SRC/lib.rs
pub mod subm;
pub fn coverage1(i : bool) -> bool {
if i {
true
}
else {
false
}
}
#[cfg(test)]
mod test {
use super::coverage1;
#[test]
fn test_coverage1() {
assert!(coverage1(true));
}
}
Run Code Online (Sandbox Code Playgroud)
SRC/subm.rs
pub fn coverage2(i : bool) -> bool {
if i {
true
}
else {
false
}
}
#[cfg(test)]
mod test {
#[test]
fn test_coverage2() {
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Rust项目上运行kcov.这对于通常的测试非常有效,但是我还没弄清楚如何让它找到doc测试.
是否rustdoc创建了我可以传递kcov给运行覆盖的任何二进制文件?
当我使用codecov.io记录我的Rust项目的代码覆盖率时,覆盖范围似乎不正确.
这很奇怪.
我无法提供完整的复制项目.
我正在使用Rust的标准TravisCI配置.这是我的.travis.yml:
language: rust
cache: cargo
dist: trusty
sudo: required
rust:
- stable
- beta
- nightly
matrix:
allow_failures:
- rust: nightly
script:
- cargo build --verbose --all
- cargo test --verbose --all
after_success: |
wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz &&
tar xzf master.tar.gz &&
cd kcov-master &&
mkdir build &&
cd build &&
cmake .. &&
make &&
make install DESTDIR=../../kcov-build &&
cd ../.. &&
rm -rf kcov-master &&
for file in target/debug/myproject-*[^\.d]; do mkdir -p …Run Code Online (Sandbox Code Playgroud) 是否可以衡量执行的shell脚本而不是源脚本的代码覆盖率?
我有一个带有几个开关和选项的shell脚本。我添加了一些测试,我想衡量测试套件的覆盖范围。
资料来源:
如您所见,tests.sh执行脚本是在同一shell中执行而不是调用其函数。这样,我无法kcov衡量脚本的覆盖率。我只能测量文件的覆盖率tests.sh。
是否有可能以某种方式强制kcov测量主脚本的覆盖范围?
该命令是我可以实现的最佳命令:
/usr/local/bin/kcov --debug=31 coverage/ test/tests.sh
Run Code Online (Sandbox Code Playgroud)
在结果中,我仅看到有关shunit2和的覆盖率报告tests.sh,但是在调试输出中,我也看到了对它的引用misspell_fixer.sh。因此,我怀疑它是否可行。
我正在尝试将代码覆盖率添加到我的 Rust 库中。它报告说它被覆盖了 100%,但是当我查看报告时,很多行都没有被计算在内:https://codecov.io/gh/JelteF/defaultmap/src/c878e108c61f270718c909e1500c4c2e865a33d1/src/lib.rs#L93。 ..106
这是什么原因?是否可以解决这个问题?我已经尝试按照此答案中的建议将 RUSTFLAGS 设置为“-C link-dead-code”: https: //stackoverflow.com/a/38371687/2570866 但这没有帮助。
默认情况下,kcov在其代码覆盖率结果中包括所有源文件,包括测试函数.这会扭曲报告的覆盖率.如何告诉kcov排除测试功能?
例如:
#[test]
fn foo() {
...
}
Run Code Online (Sandbox Code Playgroud)
kcov报告了覆盖率数据foo,但我想将其排除在外.