Как запустить тестовые примеры в указанном файле?
Мои тестовые примеры пакетов разбросаны по нескольким файлам, если я запускаю go test <package_name>
, он запускает все тестовые примеры в пакете.
Нет необходимости запускать все из них. Есть ли способ указать файл для go test
для запуска, чтобы он запускал только тестовые примеры, определенные в файле?
Ответы
Ответ 1
Есть два способа. Самый простой - использовать флаг -run
и предоставить шаблон, соответствующий названиям тестов, которые вы хотите запустить.
Пример:
$ go test -run NameOfTest
Смотрите документы для получения дополнительной информации.
Другой способ - назвать конкретный файл, содержащий тесты, которые вы хотите запустить:
$ go test foo_test.go
Но тут есть подвох. Это хорошо работает, если:
-
foo.go
находится в package foo
. -
foo_test.go
находится в package foo_test
и импортирует 'foo'.
Если foo_test.go
и foo.go
- foo_test.go
и тот же пакет (общий случай), то вы должны назвать все другие файлы, необходимые для сборки foo_test
. В этом примере это будет:
$ go test foo_test.go foo.go
Я бы порекомендовал использовать шаблон -run
. Или, где/когда это возможно, всегда запускайте все тесты пакетов.
Ответ 2
Ответ @zzzz в основном завершен, но для того, чтобы спасти других от необходимости прокручивать документацию вы можете запустить один тест в пакет следующим образом:
go test packageName -run TestName
Обратите внимание, что вы хотите передать имя теста, а не имя файла, в котором существует тест.
Флаг -run
фактически принимает регулярное выражение, поэтому вы можете ограничить тестовый прогон классом тестов. Из документов:
-run regexp
Run only those tests and examples matching the regular
expression.
Ответ 3
При выполнении одного теста я обычно делаю:
go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1
-count 1
также гарантирует, что тест выполняется каждый раз вместо кэширования. Полезно, когда вы проводите тестирование в условиях гонки и у вас есть тест, который иногда дает сбой. В версиях Go, не использующих модули, того же можно добиться, установив GOCACHE=off
но это плохо взаимодействует с модулями Go.
Ответ 4
в плагине intelliJ IDEA go-lang (и я предполагаю, что в jetbrains Gogland) вы можете просто установить тип теста в файл выполнить > редактировать конфигурации
![screenshot create go test on go file]()
Ответ 5
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"
go test -v -run $(cat coordinator_test.go | testcases)
Ответ 6
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
- TestFunc должен находиться внутри файла
go
test в этом пакете - Мы можем предоставить регулярное выражение для сопоставления с набором тестовых случаев или просто функцию точного тестового случая для запуска одного тестового случая. Например
-run TestCaseFunc
Ответ 7
go test -v ./<package_name> -run Test
Предотвращает кеширование результатов теста.
go test -count=1 ./<package_name> -run Test