0

Как получить общий код покрытия для всех пакетов в Go?

2

У меня есть библиотека, состоящая из нескольких пакетов. При запуске тестов я использую флаг -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 ответ(ов)

0

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 для более эффективного тестирования с покрытием.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь