我有这样的代码:
tx, _ := db.Begin()
defer tx.Rollback()
err := db.Insert(foo)
err = db.Delete(bar)
if !err {
tx.Commit()
}
而且我不知道如何编写 2 个测试用例:
- 成功(数据插入和删除)
- 错误(没有变化)
我在想:
- 猴子通过函数注入(inject)修补正在执行数据库操作的方法,并在测试中更改此函数
- 通过更改
foo
sql 使其全局化来修补猴子 - 我不太喜欢它 - 使数据库在测试时不允许删除操作
上面的每个选项似乎都不理想,我应该如何编写这个测试用例?
最佳答案
看看我的库 dbwrap https://github.com/metakeule/dbwrap 实现一个驱动程序。驱动程序,环绕另一个驱动程序。
它还有一个假驱动程序,您可以像这样使用它。
package main
import (
"fmt"
"github.com/metakeule/dbwrap"
)
var fake, db = dbwrap.NewFake()
func q1() {
fake.SetNumInputs(1)
db.Query("Select ?", "hiho")
q, v := fake.LastQuery()
fmt.Println(q, v)
}
使用 fake.go
的源代码作为起点。
关于sql - 如何在go lang中测试事务回滚和提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23660549/