gin-base/db/driver/driver_test.go

158 lines
4.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package driver
import (
"fmt"
"testing"
)
// TestDriverRegistration 测试驱动注册功能
func TestDriverRegistration(t *testing.T) {
fmt.Println("\n=== 测试驱动注册功能 ===")
// 获取默认驱动管理器
manager := GetDefaultManager()
// 在纯自研设计中,我们需要先手动注册驱动才能使用
// 这里我们注册一个通用驱动作为示例(实际使用时需要先导入第三方驱动)
// 测试列出所有驱动
drivers := manager.ListDrivers()
fmt.Printf("✓ 已注册驱动列表:%v\n", drivers)
fmt.Println("✓ 驱动注册测试通过")
}
// TestRegisterDriverByConfig 测试根据配置注册驱动
func TestRegisterDriverByConfig(t *testing.T) {
fmt.Println("\n=== 测试根据配置注册驱动 ===")
manager := GetDefaultManager()
// 测试不支持的数据库类型
err := manager.RegisterDriverByConfig("unsupported")
if err == nil {
t.Error("不支持的数据库类型应该返回错误")
} else {
fmt.Printf("✓ 不支持的数据库类型返回错误:%v\n", err)
}
// 测试已注册的驱动类型(应该返回提示信息,因为没有实际注册驱动)
err = manager.RegisterDriverByConfig("mysql")
if err != nil {
fmt.Printf("✓ MySQL 配置驱动返回提示信息:%v\n", err)
} else {
fmt.Println("✓ MySQL 配置驱动注册成功")
}
fmt.Println("✓ 根据配置注册驱动测试通过")
}
// TestMultipleRegistrations 测试重复注册
func TestMultipleRegistrations(t *testing.T) {
fmt.Println("\n=== 测试重复注册 ===")
manager := GetDefaultManager()
// 在实际使用中,用户可以注册他们选择的驱动
// 例如:注册一个通用驱动
genericDriver := NewGenericDriver("sqlite3")
_ = manager.Register("sqlite3", genericDriver)
// 这里可能成功或失败,取决于是否已经注册了该驱动名
fmt.Println("✓ 重复注册测试通过")
}
// TestDriverOpen 测试打开数据库连接
func TestDriverOpen(t *testing.T) {
fmt.Println("\n=== 测试打开数据库连接 ===")
// 在纯自研设计中,我们不直接打开连接,而是提供接口给使用者
// 这里我们只是验证驱动结构的创建
// 创建一个通用驱动
genericDriver := NewGenericDriver("sqlite3")
if genericDriver.driverName != "sqlite3" {
t.Errorf("期望驱动名为 sqlite3实际为 %s", genericDriver.driverName)
}
fmt.Println("✓ 打开数据库连接测试通过")
}
// ExampleRegisterDriverByConfig 使用示例
func exampleRegisterDriverByConfig() {
manager := GetDefaultManager()
// 在实际应用中,用户需要先导入他们选择的数据库驱动
// import _ "github.com/mattn/go-sqlite3" // SQLite 驱动
// import _ "github.com/go-sql-driver/mysql" // MySQL 驱动
// 然后注册对应的驱动
sqliteDriver := NewGenericDriver("sqlite3")
manager.Register("sqlite3", sqliteDriver)
mysqlDriver := NewGenericDriver("mysql")
manager.Register("mysql", mysqlDriver)
// 从配置文件读取数据库类型
configType := "mysql" // 这通常来自配置文件
// 验证驱动是否已注册
err := manager.RegisterDriverByConfig(configType)
if err != nil {
fmt.Printf("驱动未注册,请先注册:%v\n", err)
return
}
fmt.Printf("成功验证 %s 驱动注册\n", configType)
}
// ExampleUseWithConfig 使用配置的示例
func exampleUseWithConfig() {
// 这是一个伪代码示例,展示如何与配置文件结合使用
/*
// 用户需要先导入并注册他们选择的驱动
import _ "github.com/mattn/go-sqlite3"
manager := driver.GetDefaultManager()
// 注册驱动
manager.Register("sqlite3", &driver.GenericDriver{driverName: "sqlite3"})
// 加载配置
config, err := config.LoadFromFile("config.yaml")
if err != nil {
log.Fatal("加载配置失败:", err)
}
// 验证驱动注册
err = manager.RegisterDriverByConfig(config.Database.Type)
if err != nil {
log.Fatal("驱动未注册:", err)
}
// 打开数据库连接(使用标准库)
db, err := manager.Open(config.Database.GetDriverName(), config.Database.BuildDSN())
if err != nil {
log.Fatal("打开数据库失败:", err)
}
// 使用 db 进行数据库操作
*/
}
// TestDriverAvailability 测试驱动可用性检测
func TestDriverAvailability(t *testing.T) {
fmt.Println("\n=== 测试驱动可用性检测 ===")
manager := GetDefaultManager()
// 测试未注册的驱动
isAvailable := manager.isDriverAvailable("sqlite3")
fmt.Printf("✓ SQLite 驱动可用性:%v\n", isAvailable)
isAvailable = manager.isDriverAvailable("mysql")
fmt.Printf("✓ MySQL 驱动可用性:%v\n", isAvailable)
fmt.Println("✓ 驱动可用性检测测试通过")
}