go get github.com/goapt/dbunit
1、单数据库自动辅助测试函数
dbunit.Run(t, "testdata/schema.sql", func(t *testing.T, db *sql.DB) {
row := db.QueryRow("select email from users where id = 1")
var email string
if err := row.Scan(&email); err != nil {
t.Fatal(err)
}
if email != "[email protected]" {
t.Fatalf("user mismatch want %s,but get %s", "[email protected]", email)
}
})
dbunit.Run 会自动创建数据库,并且自动导入
testdata/fixtures
目录下面的测试数据
2、多数据库创建
dbunit.New(t, func(d *DBUnit) {
db := d.NewDatabase("testdata/schema.sql","testdata/fixtures/users.yml")
// more database
db2 = d.NewDatabase("testdata/schema2.sql")
.....
})
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:3306)/%s", os.Getenv("DEV_DATABASE_USERNAME"), os.Getenv("DEV_DATABASE_PASSWORD"), os.Getenv("DEV_DATABASE_HOST"), "example")+"?charset=utf8&parseTime=True&loc=Asia%2FShanghai")
if err != nil {
t.Fatal("db open error:", err)
}
// 导出前10个文档信息
data, err := dbunit.Dump(db, "testdata/fixtures/documents.yml", "select * from documents limit 10")
if err != nil {
t.Fatal("dump documents error:", err)
}
// 从结果集中获取用户ID
userIds := dbunit.Pluck(data, "user_id")
// 导出所有相关的用户
_, err = dbunit.Dump(db, "testdata/fixtures/users.yml", "select * from users where id in(?)", userIds)
if err != nil {
t.Fatal("dump users error:", err)
}
如果导出的数据已经在数据集文件中存在,则会忽略,判断依据为主键一致
你可以在参看 testdata/fixture.go
脚本编写测试集导出脚本
// 文章数据集
data, err := dbunit.Dump(db, "testdata/fixtures/articles.yml",
"select * from articles where doc_id in(1,2)",
)
if err != nil {
panic(err)
}
dbunit.New(t, func(d *DBUnit) {
db := d.NewDatabase("testdata/schema.sql","testdata/fixtures/users.yml")
gormDB, err := gorm.Open(mysql.New(mysql.Config{Conn: db}))
})
当数据中需要动态数据,比如时间,可以参考如下做法,或者贡献你要的templateFunc
- id: 1
created_at: {{now}}
updated_at: {{now}}