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

red*_*nkd 4 rust kcov

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

例如:

#[test]
fn foo() {
    ...
}
Run Code Online (Sandbox Code Playgroud)

kcov报告了覆盖率数据foo,但我想将其排除在外.

Jan*_*cki 6

将测试代码放在不同的文件中并使用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中排除测试.)