---
name: test_env_set
kind: function
lang: go
domain: core
version: "1.0.0"
purity: impure
signature: "func TestEnvSet(t *testing.T, vars map[string]string) func()"
description: "Setea variables de entorno para la duracion del test y retorna una funcion restore. Las variables inexistentes se eliminan al restaurar. Registra t.Cleanup automaticamente."
tags: [testing, env, environment, test_helper]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: ["os", "testing"]
params:
  - name: t
    desc: "testing.T del test actual; usado para t.Helper() y registrar t.Cleanup"
  - name: vars
    desc: "mapa de nombre de variable a valor a setear durante el test"
output: "funcion restore() que restablece el estado original del entorno; tambien se registra en t.Cleanup para ejecucion automatica"
tested: true
tests:
  - "variable nueva se setea y se restaura al finalizar"
  - "variable existente se sobreescribe y se restaura al finalizar"
  - "multiples variables se setean y restauran correctamente"
  - "restore manual funciona antes del cleanup automatico"
test_file_path: "functions/core/test_env_set_test.go"
file_path: "functions/core/test_env_set.go"
---

## Ejemplo

```go
restore := TestEnvSet(t, map[string]string{
    "DATABASE_URL": "postgres://localhost/testdb",
    "LOG_LEVEL":    "debug",
})
// Las vars estan seteadas aqui
defer restore() // opcional — t.Cleanup ya lo hace

val := os.Getenv("DATABASE_URL")
// val == "postgres://localhost/testdb"
```

## Notas

Funcion impura — modifica el entorno del proceso.
No es segura para tests paralelos que usen las mismas variables de entorno.
Las variables que no existian antes del test se eliminan (Unsetenv) al restaurar.
