package auth import ( "carrotskin/pkg/config" "testing" ) // TestGetJWTService_NotInitialized 测试未初始化时获取JWT服务 func TestGetJWTService_NotInitialized(t *testing.T) { _, err := GetJWTService() if err == nil { t.Error("未初始化时应该返回错误") } expectedError := "JWT服务未初始化,请先调用 auth.Init()" if err.Error() != expectedError { t.Errorf("错误消息 = %q, want %q", err.Error(), expectedError) } } // TestMustGetJWTService_Panic 测试MustGetJWTService在未初始化时panic func TestMustGetJWTService_Panic(t *testing.T) { defer func() { if r := recover(); r == nil { t.Error("MustGetJWTService 应该在未初始化时panic") } }() _ = MustGetJWTService() } // TestInit_JWTService 测试JWT服务初始化 func TestInit_JWTService(t *testing.T) { cfg := config.JWTConfig{ Secret: "test-secret-key", ExpireHours: 24, } err := Init(cfg) if err != nil { t.Errorf("Init() 错误 = %v, want nil", err) } // 验证可以获取服务 service, err := GetJWTService() if err != nil { t.Errorf("GetJWTService() 错误 = %v, want nil", err) } if service == nil { t.Error("GetJWTService() 返回的服务不应为nil") } } // TestInit_JWTService_Once 测试Init只执行一次 func TestInit_JWTService_Once(t *testing.T) { cfg := config.JWTConfig{ Secret: "test-secret-key-1", ExpireHours: 24, } // 第一次初始化 err1 := Init(cfg) if err1 != nil { t.Fatalf("第一次Init() 错误 = %v", err1) } service1, _ := GetJWTService() // 第二次初始化(应该不会改变服务) cfg2 := config.JWTConfig{ Secret: "test-secret-key-2", ExpireHours: 48, } err2 := Init(cfg2) if err2 != nil { t.Fatalf("第二次Init() 错误 = %v", err2) } service2, _ := GetJWTService() // 验证是同一个实例(sync.Once保证) if service1 != service2 { t.Error("Init应该只执行一次,返回同一个实例") } }