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

How do I exclude test functions from code coverage when using 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 中的测试。)