Как исключить тестовые функции из покрытия кода при использовании 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.)

Другие вопросы по тегам