Метод testing.T.Skip

Метод testing.T.Skip используется для пропуска выполнения текущего теста или подтеста. Он принимает один параметр - сообщение с причиной пропуска. При вызове этого метода тест немедленно останавливается, помечается как пропущенный и не считается проваленным или успешным. Это полезно для случаев, когда тест не может быть выполнен из-за отсутствия необходимых условий, зависимостей или если функциональность временно недоступна.

Синтаксис

gofunc (t *testing.T) Skip(args ...any)

Метод принимает аргументы в том же формате, что и fmt.Println. Сообщение о пропуске будет выведено в лог теста.

Пример

Давайте рассмотрим базовый пример использования метода Skip:

gopackage main

import (
  "testing"
)

func TestSkipExample(t *testing.T) {
  t.Skip("Skipping this test for demonstration")
  // Этот код не выполнится
  t.Fatal("This line will never be reached")
}

Результат выполнения теста:

go"Skipping this test for demonstration"

Тест будет помечен как пропущенный (SKIP), и сообщение будет выведено в лог.

Пример

Рассмотрим условный пропуск теста на основе наличия переменной окружения:

gopackage main

import (
  "os"
  "testing"
)

func TestIntegrationWithDatabase(t *testing.T) {
  if os.Getenv("INTEGRATION_TESTS") == "" {
    t.Skip("Skipping integration test: INTEGRATION_TESTS not set")
  }
  // Выполнение интеграционного теста с базой данных
  t.Log("Running integration test with database")
}

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

Пример

Использование метода Skip внутри подтеста:

gopackage main

import (
  "testing"
)

func TestSubtestSkip(t *testing.T) {
  t.Run("Subtest A", func(t *testing.T) {
    t.Log("Running Subtest A")
  })

  t.Run("Subtest B", func(t *testing.T) {
    if true { // Условный пропуск
      t.Skip("Skipping Subtest B")
    }
    t.Log("This will not be printed")
  })

  t.Run("Subtest C", func(t *testing.T) {
    t.Log("Running Subtest C")
  })
}

Результат выполнения теста:

go"Running Subtest A"
"Skipping Subtest B"
"Running Subtest C"

Подтест B будет пропущен, тогда как подтесты A и C выполнятся без проблем. Это позволяет гибко управлять выполнением отдельных частей теста.

Смотрите также

  • метод testing.T.Skipf,
    который позволяет форматировать сообщение пропуска
  • метод testing.T.SkipNow,
    который пропускает тест без вывода сообщения
  • метод testing.T.Skipped,
    который проверяет, был ли тест пропущен
  • метод testing.F.Skip,
    который пропускает fuzz-тест с указанием причины