Подтвердить что ты не робот

Как измерить охват кода в Голанге?

Кто-нибудь преуспел в создании покрытия кода для модульных тестов Go? Я не могу найти инструмент для этого в Интернете.

4b9b3361

Ответ 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 opens cover.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

В дополнение к этому в вашем браузере вы увидите, что этот инструмент показывает красным все строки кода, которые не покрываются тестами:

enter image description here

Также можно просто сохранить файл покрытия 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

Скриншот

enter image description here

Ответ 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 и проанализируйте подробную информацию о покрытии.