//go:build integration package database import ( "fmt" "os" "testing" "time" "skeleton/config" "skeleton/models" "go.uber.org/zap" ) func TestPostgresAndMySQL(t *testing.T) { tests := []struct { driver string env string }{ {driver: "postgres", env: "TEST_POSTGRES_DSN"}, {driver: "mysql", env: "TEST_MYSQL_DSN"}, } for _, tt := range tests { t.Run(tt.driver, func(t *testing.T) { dsn := os.Getenv(tt.env) if dsn == "" { t.Skipf("%s 未设置", tt.env) } cfg := config.DatabaseConfig{ Driver: tt.driver, DSN: dsn, MaxIdleConns: 1, MaxOpenConns: 2, ConnMaxLifetime: 1, } if err := Init(&cfg, zap.NewNop()); err != nil { t.Fatalf("Init() error = %v", err) } t.Cleanup(func() { _ = Close(); DB = nil }) if err := DB.AutoMigrate(&models.User{}); err != nil { t.Fatalf("AutoMigrate() error = %v", err) } user := models.User{ Username: fmt.Sprintf("integration_%s_%d", tt.driver, time.Now().UnixNano()), Password: "test-hash", } if err := DB.Create(&user).Error; err != nil { t.Fatalf("Create() error = %v", err) } if err := DB.Delete(&user).Error; err != nil { t.Fatalf("Delete() error = %v", err) } }) } }