РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
949 of 1593 menu

Метод testing.T.Cleanup

Метод testing.T.Cleanup регистрирует функцию очистки, которая будет вызвана после завершения теста или подтеста. Он принимает один параметр — функцию без аргументов и без возвращаемых значений, которая будет выполнена в порядке, обратном их регистрации (LIFO). Этот метод особенно полезен для освобождения ресурсов, закрытия файлов, удаления временных каталогов или сброса состояния между тестами.

Синтаксис

t.Cleanup(func())

Пример с временным файлом

Давайте создадим временный файл в тесте и удалим его после завершения с помощью Cleanup:

package main import ( "fmt" "os" "testing" ) func TestTempFile(t *testing.T) { file, err := os.CreateTemp("", "test-*.txt") if err != nil { t.Fatal(err) } t.Cleanup(func() { os.Remove(file.Name()) fmt.Println("cleanup: file removed") }) file.WriteString("test data") fmt.Println("test: file created") }

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

"test: file created" "cleanup: file removed"

Пример с несколькими функциями очистки

Функции очистки выполняются в обратном порядке их регистрации. Давайте зарегистрируем несколько функций:

package main import ( "fmt" "testing" ) func TestMultipleCleanups(t *testing.T) { t.Cleanup(func() { fmt.Println("cleanup: third") }) t.Cleanup(func() { fmt.Println("cleanup: second") }) t.Cleanup(func() { fmt.Println("cleanup: first") }) fmt.Println("test: running") }

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

"test: running" "cleanup: first" "cleanup: second" "cleanup: third"

Пример с подтестами

Функции очистки выполняются после завершения каждого подтеста, что позволяет изолировать ресурсы между подтестами:

package main import ( "fmt" "testing" ) func TestSubtestCleanup(t *testing.T) { t.Cleanup(func() { fmt.Println("main cleanup") }) t.Run("subtest1", func(t *testing.T) { t.Cleanup(func() { fmt.Println("subtest1 cleanup") }) fmt.Println("subtest1 running") }) t.Run("subtest2", func(t *testing.T) { t.Cleanup(func() { fmt.Println("subtest2 cleanup") }) fmt.Println("subtest2 running") }) }

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

"subtest1 running" "subtest1 cleanup" "subtest2 running" "subtest2 cleanup" "main cleanup"

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

  • метод testing.T.TempDir,
    который создает временный каталог и автоматически удаляет его
  • метод testing.T.Setenv,
    который устанавливает переменную окружения и восстанавливает ее
  • метод testing.T.Helper,
    который помечает функцию как вспомогательную для тестов
  • метод testing.T.Parallel,
    который указывает, что тест можно выполнять параллельно
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить