воскресенье, 30 июня 2019 г.

Команды go: go test, тестировать пакеты

Использование:

go test [build/test flags] [packages] [build/test flags & test binary flags]

go test автоматизирует тестирование пакетов, названных путями импорта. Он печатает резюме результатов теста в формате:

ok   archive/tar   0.011s
FAIL archive/zip   0.022s
ok   compress/gzip 0.033s
...

с последующим подробным выводом для каждого неудачного пакета.

go test перекомпилирует каждый пакет вместе с любыми файлами с именами, соответствующими шаблону файла *_test.go. Эти дополнительные файлы могут содержать функции тестирования, эталонные (benchmark) функции и примеры функций. Смотрите 'go help testfunc' для более подробной информации. Каждый перечисленный пакет вызывает выполнение отдельного тестового бинарного файла. Файлы, имена которых начинаются с "_" (включая "_test.go") или "." игнорируются

Тестовые файлы, которые объявляют пакет с суффиксом "_test", будут скомпилированы как отдельный пакет, а затем связаны и запущены с основным тестовым бинарным файлом.

Инструмент go игнорирует каталог с именем "testdata", делая его доступным для хранения вспомогательных данных, необходимых для тестов.

В рамках создания бинарного теста go test выполняет go vet для пакета и его исходных файлов для выявления значительных проблем. Если go vet обнаружит какие-либо проблемы, go test сообщит их и не запустит бинарный файл теста. Используется только подмножество с высокой достоверностью проверок по умолчанию. Это подмножество: 'atomic', 'bool', 'buildtags', 'nilfunc' и 'printf'. Вы можете просмотреть документацию для этих и других vet тестов через "go doc cmd/vet". Чтобы отключить запуск go vet, используйте флаг -vet=off.

Все выходные данные теста и итоговые строки выводятся на стандартный вывод команды go, даже если тест выводит их со своей собственной стандартной ошибкой. (Стандартная ошибка команды go зарезервирована для ошибок печати при построении тестов.)

Go test выполняется в двух разных режимах:

Первый, называемый режимом локального каталога, возникает, когда go test вызывается без аргументов пакета (например, 'go test' или 'go test -v'). В этом режиме go test компилирует исходные коды пакетов и тесты, найденные в текущем каталоге, а затем запускает полученный тестовый бинарный файл. В этом режиме кэширование (обсуждается ниже) отключено. После того, как пакетный тест завершится, go test напечатает итоговую строку, показывающую статус теста ('ok' или 'FAIL'), имя пакета и истекшее время.

Второй, называемый режимом списка пакетов, возникает, когда go test вызывается с явными аргументами пакета (например, 'go test math', 'go test ./...' и даже 'go test .'). В этом режиме go test скомпилирует и протестирует каждый из пакетов, перечисленных в командной строке. Если пакетный тест пройден, go test печатает только последнюю итоговую строку 'ok'. Если пакетный тест не пройден, go test распечатывает полный тестовый вывод. Если вызывается с флагом -bench или -v, go test печатает полный вывод даже для прохождения пакетных тестов, чтобы отобразить запрошенные результаты тестов или подробное ведение журнала.

Только в режиме списка пакетов, go test кэширует успешные результаты тестирования пакета, чтобы избежать ненужного повторного запуска тестов. Когда результаты теста могут быть восстановлены из кэша, go test перезапустит предыдущий вывод вместо повторного запуска тестового бинарного файла. Когда это происходит, go test печатает '(cached)' вместо истекшего времени в итоговой строке.

Правило совпадения в кеше заключается в том, что в прогоне используется один и тот же тестовый бинарный файл, а флаги в командной строке целиком исходят из ограниченного набора "кэшируемых" ('cacheable') тестовых флагов, определенных как -cpu, -list, -parallel, -run, -short, и -v. Если запуск go test имеет какие-либо тестовые или не тестовые флаги вне этого набора, результат не кэшируется. Чтобы отключить кэширование тестов, используйте любой тестовый флаг или аргумент, кроме кешируемых флагов. Идиоматический способ явного отключения кэширования тестов - использовать -count=1. Тесты, которые открывают файлы внутри корня исходного кода пакета (обычно $GOPATH) или которые обращаются к переменным среды, соответствуют только будущим прогонам, в которых файлы и переменные среды не изменяются. Кэшированный результат теста обрабатывается как выполняющийся в кратчайшие сроки, поэтому успешный результат теста пакета будет кэшироваться и использоваться повторно независимо от значения параметра -timeout.

В дополнение к флагам сборки, флаги, обрабатываемые самим 'go test':

-args
    Передать остаток от командной строки (все после -args)
    бинарному тесту, без интерпретации и без изменений.
    Поскольку этот флаг потребляет оставшуюся часть командной строки,
    список пакетов (если имеется) должен появляться перед этим флагом.

-с
    Скомпилировать тестовый бинарный файл в pkg.test, но не запускать его
    (где pkg - последний элемент пути импорта пакета).
    Имя файла можно изменить с помощью флага -o.

-exec xprog
    Запустить тестовый бинарный файл с помощью xprog. Поведение такое же, как
    в 'go run'. Смотрите подробности в 'go help run'.

-i
    Установить пакеты, которые являются зависимостями теста.
    Не запускать тест.

-json
    Преобразовать выходные данные теста в формат JSON, подходящий для автоматической обработки.
    Смотрите 'go doc test2json' для деталей кодирования.

-o file
    Скомпилировать бинарный файл теста в указанный файл.
    Тест все еще выполняется (если не указано -c или -i).

Бинарный файл теста также принимает флаги, которые управляют выполнением теста; эти флаги также доступны в 'go test'. Смотрите 'go help testflag' для подробностей.

Для получения дополнительной информации о флагах сборки см. go help build. Подробнее об указании пакетов см. go help packages.

Смотрите также: go build, go vet.


Читайте также:


Комментариев нет:

Отправить комментарий