代码清单 1 展示了 SeedLists 函数及其如何创建测试数据 。list.List 定义了一个用于插入的数据表 。然后,将测试数据插入数据库 。为了帮助将插入的数据与测试期间进行的任何数据库调用的结果进行比较,测试数据集返回给调用方 。
接下来,我们看看将更多测试数据插入数据库的 SeedItems 函数 。
代码清单 2func SeedItems(dbc *sqlx.DB, lists []list.List) ([]item.Item, error) { now := time.Now().Truncate(time.Microsecond) items := []item.Item{ { ListID: lists[0].ID, // Grocery Name: "Chocolate Milk", Quantity: 1, Created: now, Modified: now, }, { ListID: lists[0].ID, // Grocery Name: "mac and Cheese", Quantity: 2, Created: now, Modified: now, }, { ListID: lists[1].ID, // To-do Name: "Write Integration Tests", Quantity: 1, Created: now, Modified: now, }, } for i := range items { stmt, err := dbc.Prepare("INSERT INTO item (list_id, name, quantity, created, modified) VALUES ($1, $2, $3, $4, $5) RETURNING item_id;") if err != nil { return nil, errors.Wrap(err, "prepare item insertion") } row := stmt.QueryRow(items[i].ListID, items[i].Name, items[i].Quantity, items[i].Created, items[i].Modified) if err = row.Scan(&items[i].ID); err != nil { if err := stmt.Close(); err != nil { return nil, errors.Wrap(err, "close psql statement") } return nil, errors.Wrap(err, "capture list id") } if err := stmt.Close(); err != nil { return nil, errors.Wrap(err, "close psql statement") } } return items, nil}
代码清单 2 显示了 SeedItems 函数如何创建测试数据 。除了使用 item.Item 数据类型,该代码与清单 1 基本相同 。testdb 包中还有一个未提到的函数 Truncate 。
代码清单 3func Truncate(dbc *sqlx.DB) error { stmt := "TRUNCATE TABLE list, item;" if _, err := dbc.Exec(stmt); err != nil { return errors.Wrap(err, "truncate test database tables") } return nil}
推荐阅读
- 索泰推出被动散热迷你主机:搭载十代 i3,双网口
- java枚举类型,为什么强烈推荐使用?看看它的7种场景方法
- 漏洞无处不在,3步教你暴力破解ssh服务
- 敬老爱老的优美句子有哪些?
- 淘宝店铺描述写什么 淘宝开店描述下你的店铺这怎么写
- 茶在手中是风景,你我都是彼此的小心柑
- 淘宝店铺销量突然下降是什么原因 为什么淘宝销量突然减少
- 茶礼潜规则你知道否,至心茶礼
- 红茶解暑秘招 让你轻松一夏
- 淘宝不实名认证 为什么会不符合淘宝认证的要求