rust - 使用 kcov 时如何从代码覆盖中排除测试函数?

标签 rust kcov

默认情况下,kcov 在其代码覆盖率结果中包含所有源文件,包括测试函数。这扭曲了报告的覆盖率。我如何告诉 kcov 排除测试函数?

例如:

#[test]
fn foo() {
    ...
}

kcov 报告了 foo 的覆盖率数据,但我想排除它。

最佳答案

将测试代码放在不同的文件中并使用 kcov 参数 --exclude-path=./test(用于集成测试)或 -- exclude-pattern=_test.rs(如果您将所有针对 foo.rs 的测试移至 foo_test.rs)。

另一种方法是使用 kcov 参数 --exclude-region='#[cfg(test)]:#[cfg(testkcovstopmarker)]' 并使确保每个文件要么在末尾只有测试,后面没有非测试代码,要么在其后添加停止标记 #[cfg(testkcovstopmarker)] 和必要的未使用定义,以使 rustc 快乐。 (kcov 查找一行中任意位置的区域的开始和结束字符串。)

(也有可能根据它们包含的字符串排除行,但这不适用于排除 Rust 中的测试。)

关于rust - 使用 kcov 时如何从代码覆盖中排除测试函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42440192/

相关文章:

rust - 为什么 kcov 计算 Rust 程序的代码覆盖统计数据不正确?

docker - 为什么我的kcov命令中的outdir总是为空?

bash - 使用 kcov/shunit2 测量已执行 shell 脚本的代码覆盖率

rust - 模式匹配解析 float 错误

compilation - 特征 `core::ops::Index<i32>` 未实现

functional-programming - 'functional' Rust 对性能有何影响?

string - 如何将某些内容连接到字符串的前面?

if-statement - 在折叠内部使用 if