Метод testing.T.TempDir

Метод testing.T.TempDir создает временную директорию в файловой системе, которая будет автоматически удалена по завершению теста. Этот метод полезен для тестов, которым требуется создавать временные файлы или директории. Первый вызов метода создает новую пустую директорию, повторные вызовы создают дополнительные директории. Все созданные директории удаляются в конце теста.

Синтаксис

gofunc (t *T) TempDir() string

Метод не принимает параметров и возвращает строку с абсолютным путем к созданной временной директории.

Пример 1

Давайте создадим временную директорию и проверим, что она существует:

gopackage main

import (
  "fmt"
  "os"
  "testing"
)

func TestTempDir(t *testing.T) {
  dir := t.TempDir()
  fmt.Println("Directory:", dir)

  if _, err := os.Stat(dir); err != nil {
    t.Errorf("Directory does not exist: %v", err)
  } else {
    fmt.Println("Directory exists")
  }
}

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

go"Directory: /tmp/TestTempDir123456789/001"
"Directory exists"

Пример 2

Давайте создадим временный файл внутри временной директории:

gopackage main

import (
  "fmt"
  "os"
  "path/filepath"
  "testing"
)

func TestTempFile(t *testing.T) {
  dir := t.TempDir()
  filePath := filepath.Join(dir, "testfile.txt")

  err := os.WriteFile(filePath, []byte("test data"), 0644)
  if err != nil {
    t.Errorf("Failed to write file: %v", err)
  }

  data, err := os.ReadFile(filePath)
  if err != nil {
    t.Errorf("Failed to read file: %v", err)
  }

  fmt.Printf("File content: %s\n", string(data))
}

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

go"File content: test data"

Пример 3

Давайте создадим несколько временных директорий в одном тесте:

gopackage main

import (
  "fmt"
  "testing"
)

func TestMultipleTempDirs(t *testing.T) {
  dir1 := t.TempDir()
  dir2 := t.TempDir()
  dir3 := t.TempDir()

  fmt.Println("Directory 1:", dir1)
  fmt.Println("Directory 2:", dir2)
  fmt.Println("Directory 3:", dir3)
}

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

go"Directory 1: /tmp/TestMultipleTempDirs123456789/001"
"Directory 2: /tmp/TestMultipleTempDirs123456789/002"
"Directory 3: /tmp/TestMultipleTempDirs123456789/003"

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

  • метод testing.T.Setenv,
    который устанавливает переменную окружения для теста
  • метод testing.T.Cleanup,
    который регистрирует функции очистки после теста
  • метод testing.T.Run,
    который запускает вложенные подтесты
  • метод testing.T.Parallel,
    который разрешает параллельный запуск тестов