testing.T.TempDir în Go

Creează un director temporar nou pentru test și îl șterge automat când testul se termină.

Sintaxă
func (c *T) TempDir() string

Ce face testing.T.TempDir

t.TempDir() creează un director unic (fiecare apel dă altul) și înregistrează ștergerea lui cu t.Cleanup. Este locul potrivit pentru fișierele create de test: exporturi, baze de date SQLite, configurări.

Nu mai ai nevoie de os.MkdirTemp și defer os.RemoveAll. Dacă la final directorul nu poate fi șters (de exemplu un fișier e încă deschis pe Windows), testul eșuează, ceea ce te ajută să găsești fișierele uitate deschise.

Ce returnează

Calea absolută a directorului.

Exemple

Exemplul 1: Testarea unei funcții care scrie fișiere

// fișierul export.go
package magazin

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

// Exporta scrie clienții în dir/clienti.csv și returnează calea.
func Exporta(dir string, clienti []string) (string, error) {
    cale := filepath.Join(dir, "clienti.csv")
    f, err := os.Create(cale)
    if err != nil {
        return "", err
    }
    defer f.Close()
    for i, c := range clienti {
        fmt.Fprintf(f, "%d,%s\n", i+1, c)
    }
    return cale, nil
}

// fișierul export_test.go
package magazin

import (
    "os"
    "testing"
)

func TestExporta(t *testing.T) {
    dir := t.TempDir()
    cale, err := Exporta(dir, []string{"Ana", "Mihai"})
    if err != nil {
        t.Fatal(err)
    }
    date, err := os.ReadFile(cale)
    if err != nil {
        t.Fatal(err)
    }
    if string(date) != "1,Ana\n2,Mihai\n" {
        t.Errorf("conținut %q", date)
    }
    t.Log("fișier verificat în directorul temporar")
}

Rezultatul în terminal (timpii diferă la fiecare rulare)

$ go test -v
=== RUN   TestExporta
    export_test.go:21: fișier verificat în directorul temporar
--- PASS: TestExporta (0.00s)
PASS
ok  	magazin	0.229s

Greșeli frecvente

  • Scrii fișierele de test în directorul proiectului (os.WriteFile("test.csv", ...)). Rămân acolo după test și pot fi adăugate din greșeală în git.

Comenzi înrudite

  • testing.T.Cleanup: Înregistrează o funcție de curățenie care rulează după ce testul (și subtestele lui) s-au terminat.
  • os.MkdirTemp: Creează un director temporar nou, cu nume unic, și returnează calea lui.
  • testing.T: Tipul primit de fiecare funcție de test; prin el raportezi erori, scrii mesaje și controlezi testul.