Как исключить тестовые функции из покрытия кода при использовании kcov?
По умолчанию kcov включает все исходные файлы, включая тестовые функции, в результаты своего покрытия кода. Это искажает заявленный уровень покрытия. Как мне сказать kcov исключить тестовые функции?
Например:
#[test]
fn foo() {
...
}
KCOV сообщает данные покрытия для foo
, но я хочу это исключить.
1 ответ
Поместите свой тестовый код в разные файлы и используйте 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.)