Кому-нибудь удалось создать покрытие кода для модульных тестов Go? Я не могу найти в Интернете инструмент для этого.
Кому-нибудь удалось создать покрытие кода для модульных тестов Go? Я не могу найти в Интернете инструмент для этого.
Ответы:
Обратите внимание, что Go 1.2 (Q4 2013, доступен rc1) теперь будет отображать результаты тестового покрытия :
Одной из основных новых функций
go test
является то, что теперь он может вычислять и с помощью новой, отдельно установленнойgo tool cover
программы " " отображать результаты покрытия тестами .
cover
Инструмент является частьюgo.tools
subrepository . Его можно установить, запустив
$ go get golang.org/x/tools/cmd/cover
Инструмент обложки выполняет две функции.
- Во-первых, когда
go test
установлен-cover
флаг "", он запускается автоматически, чтобы переписать исходный код пакета и вставить операторы инструментария. Затем тест компилируется и запускается как обычно, и выдается базовая статистика покрытия:
$ go test -coverprofile fmtcoverage.html fmt
ok fmt 0.060s coverage: 91.4% of statements
$
Во-вторых, для более подробных отчетов с помощью различных флагов «пройти тест» можно создать файл профиля покрытия, который
go tool cover
затем может анализировать программа покрытия, вызванная с помощью « ».
В последних версиях Go (19.09.2013) используются:
go test -coverprofile <filename> <package name>
Подробную информацию о том, как генерировать и анализировать статистику покрытия, можно найти, выполнив команды
$ go help testflag
$ go tool cover -help
Иван Черный упоминает в комментариях :
go test -coverprofile cover.out
а затем
go tool cover -html=cover.out
открываетсяcover.out
в вашем браузере по умолчанию
Я даже не хочу ждать, пока откроется браузер, поэтому я определил этот псевдоним:
alias gc=grep -v -e " 1$" cover.out
То, что я просто ввести gc
, и есть список всех строк не еще покрыты (здесь: с coverage.out
линии не заканчивается " 1
«).
go test -coverprofile cover.out
а затем go tool cover -html=cover.out -o cover.html
открыть cover.html
в браузере
go tool cover -html=cover.out
автоматически откроет браузер, но в моей системе это не работает. Я предпочитаю держать браузер открытым и при необходимости обновлять страницу.
Go поставляется с отличным инструментом для тестирования и покрытия. Несмотря на то, что все инструменты Go хорошо документированы, go tool cover -help
я бы посоветовал прочитать статью The Cover story в официальном блоге Go . В нем много примеров, и я настоятельно рекомендую!
У меня есть эта функция в моем ~ / .bash_profile. (вы можете просто вставить его в терминал, чтобы попробовать).
cover () {
t="/tmp/go-cover.$$.tmp"
go test -coverprofile=$t $@ && go tool cover -html=$t && unlink $t
}
Затем просто cd
перейдите в папку проекта / пакета и введите cover
. Это открывает визуальный инструмент в браузере, который показывает проверенный и непроверенный код для каждого файла в текущем пакете. Очень полезная команда! Я настоятельно рекомендую его для поиска того, что еще не на 100% протестировано! Показанные результаты для каждого файла. В раскрывающемся списке в верхнем левом углу вы можете увидеть результаты для всех файлов.
С помощью этой команды вы также можете проверить охват любого пакета, например:
cover fmt
Результатом этой команды в терминале будет:
ok fmt 0.031s coverage: 91.9% of statements
В дополнение к этому в вашем браузере вы увидите, что этот инструмент показывает красным все строки кода, которые не покрыты тестами:
Также можно просто сохранить файл покрытия html вместо того, чтобы открывать его в браузере. Это очень полезно в тех случаях, когда ваши тесты + покрытие выполняется с помощью инструмента CI, такого как Jenkins. Таким образом, вы можете обслуживать файлы покрытия с центрального сервера, и вся команда сможет видеть результаты покрытия для каждой сборки.
В дополнение к хорошим ответам, приведенным выше, я считаю, что эти три строки являются самым простым способом получить его (включая все пакеты):
go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/...
go tool cover -html=cover.out -o cover.html
open cover.html
Обратите внимание, что в файле HTML вы найдете кнопку раскрывающегося списка, которая направит вас ко всем файлам.
Это прямо здесь , некоторые документы здесь .
$ go tool
6a
6c
6g
6l
addr2line
api
cgo
cov
dist
ebnflint
fix
gotype
nm
objdump
pack
pprof
prof
vet
yacc
$ go tool cov -h
usage: cov [-lsv] [-g substring] [-m minlines] [6.out args...]
-g specifies pattern of interesting functions or files
go tool cov: exit status 1
$
Я не использовал его, это все, что я знаю.
~/go/pkg/tool/linux_amd64
моей последней сборке Go за вчерашний день.
Если вы хотите видеть непокрытые строки по функциям непосредственно в терминале, я переписал для этой цели инструмент покрытия. Он доступен по адресу https://github.com/gregoryv/uncover .
использование
go get -u github.com/gregoryv/uncover/...
go test -coverprofile /tmp/c.out
uncover /tmp/c.out
Скриншот
Если вы используете VSCode, эта функция поддерживается из коробки ( но по умолчанию отключена )
Просто включите тест при сохранении + отчеты о покрытии
https://github.com/microsoft/vscode-go/wiki/On-Save-features
Он даже покажет в вашем редакторе, какие строки не покрыты, что очень удобно.
Отчет о покрытии →
а) Запустите все тесты и включите покрытие -> go test ./... -coverprofile coverage.out
б) Получите покрытие для отдельных функций, а также общее покрытие → go tool cover -func coverage.out
c) См. покрытые и не охваченные вами строки → go tool cover -html=cover.out -o coverage.html
. Откройте coverage.html
созданный таким образом файл в браузере и проанализируйте подробную информацию о покрытии.
Быстрый и простой способ - использовать инструмент покрытия, который поставляется со встроенным go:
$ go test -coverprofile cp.out // Выдает покрытие в одном лайнере в процентном отношении
После выполнения указанной выше команды, если вы хотите визуально увидеть покрытие кода (например, покрытые операторы, пропущенные и т. Д.)
Крышка инструмента $ go -html = cp.out
Примечание: вам необходимо выполнить указанные выше команды в папке, в которой вы хотите увидеть покрытие.
Попробуйте использовать образ Docker с помощью gaia-docker / base-go-build .
Это образ Docker, содержащий все, что вам нужно для создания и тестирования покрытия. Выполнение тестового покрытия внутри контейнера Docker создает папку .cover с результатами тестового покрытия вашего проекта.
docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh
Сценарий тестового покрытия , работающий на все проекты папку и создает внутри .Накрыть папки JUnit и покрытие отчетов для каждой папки, и комбайна отчета охвата всех проектов испытаний.
Codecov также предлагает сценарий, который собирает результаты покрытия: несколько файлов
Тестовое покрытие для Голанга
go get github.com/axw/gocov/gocov
go get -u gopkg.in/matm/v1/gocov-html
Убедитесь, что он установлен правильно и у вас есть доступ с вашего терминала
Запустить тестовый пример
Если вы запустите тестовый пример, он будет перерисовывать файл .json на основе файла, вы получите отчет о покрытии кода в файле .html.
gocov test >your_Coverage_report.json
После того, как ваш тестовый пример будет выполнен, сгенерируйте отчет в файле .html, используя .json
gocov-html your_Coverage_report.json >your_Coverage_report.html
Ссылка
Инструмент покрытия GoTest для go lang
Инструмент отчета о тестировании Go
Альтернативный метод
Покрытие Go Native Test
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
go test -coverprofile <filename> <package name>