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