// Package testdb provides a pure-Go SQLite helper for tests. // It uses modernc.org/sqlite (CGO-free) via gorm.io/driver/sqlite's DriverName override. package testdb import ( "testing" _ "modernc.org/sqlite" // 注册纯Go SQLite驱动,驱动名 "sqlite" gormsqlite "gorm.io/driver/sqlite" "gorm.io/gorm" "gorm.io/gorm/logger" ) // Open 使用 modernc.org/sqlite(纯Go,无需CGO)打开内存测试数据库。 // 驱动名必须是 "sqlite"(modernc 注册),而非 gorm 默认的 "sqlite3"(mattn/CGO)。 func Open(t testing.TB) *gorm.DB { t.Helper() db, err := gorm.Open(gormsqlite.New(gormsqlite.Config{ DriverName: "sqlite", DSN: "file::memory:?cache=shared&mode=memory", }), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent), }) if err != nil { t.Skipf("跳过数据库测试(SQLite不可用): %v", err) } return db } // OpenWith 使用自定义DSN func OpenWith(t testing.TB, dsn string) *gorm.DB { t.Helper() db, err := gorm.Open(gormsqlite.New(gormsqlite.Config{ DriverName: "sqlite", DSN: dsn, }), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent), }) if err != nil { t.Skipf("跳过数据库测试(SQLite不可用): %v", err) } return db }