如何在go lang中测试事务回滚和提交

时间:2014-05-14 16:46:43

标签: sql unit-testing testing transactions go

我有这样的代码:

tx, _ := db.Begin()
defer tx.Rollback()

err := db.Insert(foo)
err = db.Delete(bar)

if !err {
  tx.Commit()
}

我不知道如何编写2个测试用例:

  • 成功(插入和删除数据)
  • 错误(没有任何变化)

我在考虑:

  • 通过函数注入对正在执行db操作的方法进行修补,并在test
  • 中更改此函数
  • 通过改变foo sql使其全局化来修补猴子 - 我不太喜欢
  • 使db不允许删除操作以进行测试时间

上述每个选项似乎都不理想,我该如何编写这个测试用例?

1 个答案:

答案 0 :(得分:0)

查看我的库dbwrap https://github.com/metakeule/dbwrap 实现了driver.Driver,包裹着另一个驱动程序。

它也有一个假的驱动程序,你可以这样使用。

 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的源代码作为起点。