Как получить общий код покрытия для всех пакетов в Go?
У меня есть библиотека, состоящая из нескольких пакетов. При запуске тестов я использую флаг -cover
, и он показывает информацию о покрытии для каждого пакета по отдельности. Вот пример вывода:
--- PASS: TestSampleTestSuite (0.00s)
PASS
coverage: 28.7% of statements
ok github.com/path/to/package1 13.021s
? github.com/path/to/package2 [no test files]
=== RUN TestAbc
--- PASS: TestAbc (0.43s)
PASS
coverage: 27.7% of statements
Есть ли способ получить полное представление о покрытии, чтобы лучше понять покрытие всего проекта?
Обновление: Вот команда go test
, которую я использую:
go test ./... -v -short -p 1 -cover
1 ответ(ов)
EDIT: С тех пор, как я написал этот ответ, ситуация изменилась. Ознакомьтесь с примечаниями к релизу Go 1.10: https://golang.org/doc/go1.10#test :
Флаг
go test -coverpkg
теперь интерпретирует свой аргумент как запятую, разделяющую список шаблонов, которые должны совпадать с зависимостями каждого теста, а не как список пакетов, которые нужно загрузить заново. Например,go test -coverpkg=all
теперь является значимым способом запуска теста с включенным покрытием для тестового пакета и всех его зависимостей. Также опцияgo test -coverprofile
теперь поддерживается при запуске нескольких тестов.
Теперь вы можете выполнить следующие команды:
go test -v -coverpkg=./... -coverprofile=profile.cov ./...
go tool cover -func profile.cov
Старый ответ
Вот скрипт на Bash, извлеченный из gosweep:
#!/bin/bash
set -e
echo 'mode: count' > profile.cov
for dir in $(find . -maxdepth 10 -not -path './.git*' -not -path '*/_*' -type d);
do
if ls $dir/*.go &> /dev/null; then
go test -short -covermode=count -coverprofile=$dir/profile.tmp $dir
if [ -f $dir/profile.tmp ]; then
cat $dir/profile.tmp | tail -n +2 >> profile.cov
rm $dir/profile.tmp
fi
fi
done
go tool cover -func profile.cov
Теперь рекомендую использовать обновленный подход с -coverpkg
для более эффективного тестирования с покрытием.
Как правильно проверить, что исключение возникает в pytest?
Существует ли цикл foreach в Go?
Как сопоставить любой символ на нескольких строках в регулярном выражении?
Отформатировать строку в Go без вывода?
Юнит-тесты Android с Dagger 2