https://github.com/goapt/dbunit
golang database unit testing package
https://github.com/goapt/dbunit
Last synced: about 2 months ago
JSON representation
golang database unit testing package
- Host: GitHub
- URL: https://github.com/goapt/dbunit
- Owner: goapt
- Created: 2020-08-07T03:50:12.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2021-08-20T02:20:23.000Z (almost 4 years ago)
- Last Synced: 2023-07-27T14:42:17.236Z (almost 2 years ago)
- Language: Go
- Size: 43 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## 使用
```shell script
go get github.com/goapt/dbunit
```1、单数据库自动辅助测试函数
```go
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、多数据库创建
```go
dbunit.New(t, func(d *DBUnit) {
db := d.NewDatabase("testdata/schema.sql","testdata/fixtures/users.yml")
// more database
db2 = d.NewDatabase("testdata/schema2.sql")
.....
})
```## 从测试库导出测试数据文件
### 使用脚本导出数据
```go
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` 脚本编写测试集导出脚本```go
// 文章数据集
data, err := dbunit.Dump(db, "testdata/fixtures/articles.yml",
"select * from articles where doc_id in(1,2)",
)
if err != nil {
panic(err)
}
```### 和其他ORM配合使用
```go
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}))
})
```## 关于fixture
当数据中需要动态数据,比如时间,可以参考如下做法,或者贡献你要的templateFunc
```yaml
- id: 1
created_at: {{now}}
updated_at: {{now}}
```