Кто-нибудь преуспел в создании покрытия кода для модульных тестов Go? Я не могу найти инструмент для этого в Интернете.
Как измерить охват кода в Голанге?
Ответ 1
Обратите внимание, что Go 1.2 (4 квартал 2013 г., rc1 доступен) теперь будет отображать результаты тестового покрытия:
Одна из основных новых возможностей
go test
заключается в том, что теперь он может вычислять и, с помощью новой отдельно установленной программы "go tool cover
", отображать результаты тестового покрытия.Инструмент
cover
является частью вложенного репозиторияgo.tools
. Его можно установить, запустив
$ 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 test" могут создавать файл профиля покрытия, который затем может анализировать программа обложки, вызванная с помощью "
go tool cover
".
Последние версии Go (2013/09/19) используют:
go test -coverprofile <filename> <package name>
Подробную информацию о том, как генерировать и анализировать статистику покрытия, можно найти, выполнив команды
$ go help testflag
$ go tool cover -help
Иван Блэк упоминает в комментариях:
go test -coverprofile cover.out
и then
go tool cover -html=cover.out -o cover.html
openscover.html
in browser
Я даже не хочу ждать, пока откроется браузер, поэтому я определил этот псевдоним:
alias gc=grep -v -e " 1$" coverage.out
Что я просто набрал gc
, и у меня есть список всех строк, которые еще не охвачены (здесь: строка coverage.out
, не заканчивающаяся на "1
").
Ответ 2
Go поставляется с потрясающим инструментом для тестирования и покрытия. Хотя все инструменты Go хорошо документированы go tool cover -help
Я бы предложил прочитать статью обложки в официальном блоге Go. В нем много примеров, и я настоятельно рекомендую!
У меня есть эта функция в моем ~/.bash_profile. (вы можете просто вставить его в терминал, чтобы попробовать).
cover () {
t="/tmp/go-cover.$$.tmp"
go test -coverprofile=$t [email protected] && go tool cover -html=$t && unlink $t
}
Затем просто cd
в папку проекта/пакета go и введите cover
.
Это открывает визуальный инструмент в браузере, который показывает вам проверенный и непроверенный код для каждого файла в текущем пакете. Очень полезная команда! Я настоятельно рекомендую вам найти то, что еще не проверено на 100%! Показанные результаты для каждого файла. Из раскрывающегося списка вверху слева вы можете увидеть результаты для всех файлов.
С помощью этой команды вы также можете проверить покрытие любого пакета, например:
cover fmt
Вывод в терминале этой команды:
ok fmt 0.031s coverage: 91.9% of statements
В дополнение к этому в вашем браузере вы увидите, что этот инструмент показывает красным все строки кода, которые не покрываются тестами:
Также можно просто сохранить файл покрытия html, а не открывать его в браузере. Это очень полезно в случаях, когда ваши тесты + охват выполняется инструментом CI, например, Jenkins. Таким образом, вы можете обслуживать файлы покрытия с центрального сервера, и вся команда сможет увидеть результаты покрытия для каждой сборки.
Ответ 3
Это правильно здесь, некоторые документы здесь.
$ 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
$
Я не использовал его, это все, что я знаю.
Ответ 4
В дополнение к хорошим ответам выше, я считаю, что эти три строки - самый простой способ получить его (который включает в себя все пакеты):
go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/...
go tool cover -html=cover.out -o cover.html
open cover.html
Обратите внимание, что в файле HTML вы найдете раскрывающуюся кнопку, которая направит вас ко всем файлам.
Ответ 5
Если вам нравится видеть незакрытые линии по функциям непосредственно в терминале, я переписал инструмент для этой цели. Доступно на https://github.com/gregoryv/uncover.
Использование
go get -u github.com/gregoryv/uncover/...
go test -coverprofile /tmp/c.out
uncover /tmp/c.out
Скриншот
Ответ 6
Вдохновленные справочными меню и другими ответами на этот вопрос, просто запустите:
f=cover.out; if [ -f $f ]; then rm $f; fi; go test ./... -coverprofile $f && \
go tool cover -html $f
Ответ 7
Попробуйте использовать gaia-docker/base-go-build Docker Image.
Это изображение Docker, которое содержит все необходимое для построения и тестирования покрытия. Запуск тестового покрытия в контейнере Docker создает папку .cover с результатами тестового покрытия вашего проекта.
docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh
тестовый сценарий покрытия, работающий со всеми папками проектов и создающий внутри папки .cover папки и отчеты о покрытиях для каждой папки, а также комбинированный отчет о покрытии тестов всех проектов.
Codecov также предлагает скрипт, который собирает результаты покрытия: несколько файлов
Ответ 8
Тестовое покрытие для Голанга
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 Coverage Tool для Go Lang
Инструмент отчета о тестировании
Альтернативный метод
Go Native Test покрытие
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
Ответ 9
Быстрый и простой способ - использовать инструмент покрытия, который поставляется со встроенным Go:
$ go test -coverprofile cp.out // Излучает покрытие в процентах от лайнера
После выполнения вышеуказанной команды, если вы хотите визуально увидеть покрытие кода (например, покрытые операторы, пропущенные и т.д.)
$ go tool cover -html=cp.out
Примечание: вам нужно выполнить вышеуказанные команды в папке, где вы хотите увидеть покрытие
Ответ 10
Отчет о покрытии →
a) Запустите все тесты и включите покрытие → пройти тест. /... -coverprofile cover.out
б) Получить покрытие для отдельных функций, а также общее покрытие → перейти к покрытию инструмента -func охват.
c) Просмотрите строки, которые были покрыты, и те, которые не были покрыты вашими тестами → перейти к инструментальной обложке -html = cover.out -o cover.html Откройте созданный в браузере файл cover.html и проанализируйте подробную информацию о покрытии.