Как запустить тестовые примеры в указанном файле?

Мои тестовые примеры пакетов разбросаны по нескольким файлам, если я запускаю 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