3.7 KiB
Test Environment Configuration
Überblick
Alle Tests in diesem Projekt sind so konfiguriert, dass sie ENVIRONMENT=test verwenden, um sicherzustellen, dass:
- Die richtige Datenbank-Konfiguration verwendet wird (Test-DB statt Production-DB)
- Logger-Ausgaben reduziert sind
- Tests isoliert von der Produktionsumgebung laufen
Test-Umgebung einrichten
Option 1: Lokale setupTestEnvironment Funktion (empfohlen)
Jeder Test sollte eine lokale setupTestEnvironment Funktion verwenden:
package mypackage
import (
"os"
"testing"
)
// setupTestEnvironment setzt ENVIRONMENT=test für Tests
func setupTestEnvironment(t *testing.T) {
original := os.Getenv("ENVIRONMENT")
os.Setenv("ENVIRONMENT", "test")
t.Cleanup(func() {
if original != "" {
os.Setenv("ENVIRONMENT", original)
} else {
os.Unsetenv("ENVIRONMENT")
}
})
}
func TestMyFunction(t *testing.T) {
setupTestEnvironment(t)
// Ihr Test-Code hier...
}
Option 2: testutils Package (für komplexere Setups)
Für komplexere Test-Setups verwenden Sie das testutils Package:
package mypackage
import (
"bamort/testutils"
"testing"
)
func TestMyFunction(t *testing.T) {
testutils.SetupTestEnvironment(t)
// Oder für spezifische Konfiguration:
testutils.SetupTestEnvironmentWithConfig(t, map[string]string{
"DEBUG": "false",
"LOG_LEVEL": "ERROR",
})
// Ihr Test-Code hier...
}
Aktualisierte Test-Dateien
Folgende Test-Dateien wurden bereits aktualisiert:
- ✅
config/config_test.go- Alle Tests setzen ENVIRONMENT=test - ✅
logger/logger_test.go- Alle Tests setzen ENVIRONMENT=test - ✅
character/character_test.go- setupTestEnvironment hinzugefügt - ✅
character/handlers_test.go- Test-Umgebung konfiguriert
Database-Tests
Die database.ConnectDatabase() Funktion erkennt automatisch ENVIRONMENT=test und verwendet die Test-Datenbank:
func ConnectDatabase() *gorm.DB {
cfg := config.LoadConfig()
if cfg.Environment == "test" {
logger.Debug("Test-Umgebung erkannt, verwende Test-Datenbank")
SetupTestDB()
} else {
logger.Debug("Verwende konfigurierte Datenbank (%s)", cfg.DatabaseType)
return ConnectDatabaseOrig()
}
return DB
}
Best Practices
- Immer setupTestEnvironment() aufrufen: Jeder Test sollte die Umgebung konfigurieren
- Cleanup automatisch: Verwenden Sie
t.Cleanup()um ursprüngliche Werte wiederherzustellen - Test-Isolation: Tests sollten sich nicht gegenseitig beeinflussen
- Keine Produktionsdaten: Tests verwenden immer Test-Datenbank
Verifikation
Um zu prüfen, ob alle Tests korrekt konfiguriert sind:
# Script ausführen
./verify_test_environment.sh
# Einzelne Packages testen
go test ./config -v
go test ./logger -v
go test ./character -v
Migration bestehender Tests
Für bestehende Tests, die noch nicht aktualisiert wurden:
- Import für
oshinzufügen setupTestEnvironmentFunktion hinzufügensetupTestEnvironment(t)am Anfang jeder Test-Funktion aufrufen
Beispiel:
// Vor der Migration
func TestMyFunction(t *testing.T) {
// Test-Code...
}
// Nach der Migration
func TestMyFunction(t *testing.T) {
setupTestEnvironment(t)
// Test-Code...
}
Troubleshooting
Problem: Test verwendet Produktions-Datenbank
Lösung: setupTestEnvironment(t) am Anfang des Tests aufrufen
Problem: Umgebungsvariablen beeinflussen sich zwischen Tests
Lösung: t.Cleanup() verwenden für automatisches Aufräumen
Problem: Import-Zyklen bei testutils
Lösung: Lokale setupTestEnvironment Funktion in jedem Package verwenden