Categorygithub.com/goapt/dbunit
modulepackage
0.0.3
Repository: https://github.com/goapt/dbunit.git
Documentation: pkg.go.dev

# README

数据库单元测试辅助

Build Status codecov Go Report Card
GoDoc

使用

go get github.com/goapt/dbunit

1、单数据库自动辅助测试函数

dbunit.Run(t, "testdata/schema.sql", func(t *testing.T, db *gosql.DB) {
    user := &Users{
        Id: 1,
    }

    err := db.Model(user).Get()

    if err != nil {
        t.Fatal(err)
    }

    if user.Email != "[email protected]" {
        t.Fatalf("user mismatch want %s,but get %s", "[email protected]", user.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")
    user := &Users{
        Id: 1,
    }

    err := db.Model(user).Get()
    .....
})

从测试库导出测试数据文件

使用脚本导出数据

db, err := gosql.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)
}

关于fixture

当数据中需要动态数据,比如时间,可以参考如下做法,或者贡献你要的templateFunc

- id: 1
  created_at: {{now}}
  updated_at: {{now}}

# Packages

No description provided by the author

# Functions

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
SetDatabase 配置单元测试的数据库DSN.

# Variables

No description provided by the author

# Structs

No description provided by the author
No description provided by the author