package database import ( "carrotskin/pkg/config" "testing" "go.uber.org/zap/zaptest" ) // TestGetDB_NotInitialized 测试未初始化时获取数据库实例 func TestGetDB_NotInitialized(t *testing.T) { _, err := GetDB() if err == nil { t.Error("未初始化时应该返回错误") } expectedError := "数据库未初始化,请先调用 database.Init()" if err.Error() != expectedError { t.Errorf("错误消息 = %q, want %q", err.Error(), expectedError) } } // TestMustGetDB_Panic 测试MustGetDB在未初始化时panic func TestMustGetDB_Panic(t *testing.T) { defer func() { if r := recover(); r == nil { t.Error("MustGetDB 应该在未初始化时panic") } }() _ = MustGetDB() } // TestInit_Database 测试数据库初始化逻辑 func TestInit_Database(t *testing.T) { cfg := config.DatabaseConfig{ Driver: "postgres", Host: "localhost", Port: 5432, Username: "postgres", Password: "password", Database: "testdb", SSLMode: "disable", Timezone: "Asia/Shanghai", MaxIdleConns: 10, MaxOpenConns: 100, ConnMaxLifetime: 0, } logger := zaptest.NewLogger(t) // 验证Init函数存在且可调用 // 注意:实际连接可能失败,这是可以接受的 err := Init(cfg, logger) if err != nil { t.Logf("Init() 返回错误(可能正常,如果数据库未运行): %v", err) } } // TestAutoMigrate_ErrorHandling 测试AutoMigrate的错误处理逻辑 func TestAutoMigrate_ErrorHandling(t *testing.T) { logger := zaptest.NewLogger(t) // 测试未初始化时的错误处理 err := AutoMigrate(logger) if err == nil { // 如果数据库已初始化,这是正常的 t.Log("AutoMigrate() 成功(数据库可能已初始化)") } else { // 如果数据库未初始化,应该返回错误 if err.Error() == "" { t.Error("AutoMigrate() 应该返回有意义的错误消息") } } } // TestClose_NotInitialized 测试未初始化时关闭数据库 func TestClose_NotInitialized(t *testing.T) { // 未初始化时关闭应该不返回错误 err := Close() if err != nil { t.Errorf("Close() 在未初始化时应该返回nil,实际返回: %v", err) } }