Разделение тестов с помощью тегов сборки
В Go есть внутренний механизм для логического разделения тестов в зависимости от некоторых условий, в том числе условий на операционную систему или тип CPU. Так, например, можно отделить юнит тесты от интеграционных или от smoke тестов.
Что такое теги сборки?
Тег сборки - это комментарий в начале go-файла, который указывает компилятору, как стоит собирать этот конкретный файл.
Например, при таком теге файл будет включен в сборку только в том случае, если компиляция выполняется под линукс (GOOS=linux)
// +build linux package mypackage ...
Тег сборки должен быть расположен в начале файла, а после строки с ним должна быть пустая строка.
Также можно использовать оператор отрицания !
. Таким образом, файл с тегом // +build !linux
будет включен в сборку на всех платформах, кроме linux.
В тегах может быть несколько условий. Если условия расположены на одной строке, то они комбинируются через оператор OR. А если на нескольких строках, то через AND.
// +build linux darwin // +build amd64 package mypackage ...
В примере выше файл будет включен в сборку только под linux/amd64 или darwin/amd64 платформы.
Разделение тестов
Через теги сборки можно разделять разные виды тестов.
Рассмотрим 2 файла тестов:
myfile_test.go:
package mypackage import "testing" ...
// +build integration package mypackage import "testing" ...
В файле myfile_test.go будут расположены unit тесты, а в myfile_integration_test.go - интеграционные (более медленные).
Поэтому при запуске тестов через go test
запустятся тесты только из myfile_test.go. А если нужно запустить тесты из myfile_integration_test.go, то надо добавить флаг —tags
.
Важно понимать, что при запуске go test --tags=integration
так же запустятся unit тесты. Чтобы такого не произошло, надо добавить отрицание в теги сборки unit тестов.
// +build !integration package mypackage import "testing" ...