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

标签 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 个测试用例:

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

我在想:

  • 猴子通过函数注入(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/

相关文章:

php - MySQL - 在选择中使用数组

sql - 帮助使用 Sql 查询将字符串 (HH24MI) 与日期进行比较

mysql - 将分隔的字符串值拆分为行

java - 使用事务测试 EJB 而不将其部署到容器中?

unit-testing - 带有 angulartics2 的单元测试组件 - 无法绑定(bind)到 'angularticsCategory',因为它不是 'div' 的已知属性

testing - 如何关闭特定站点的 Postman 上的所有 SSL 检查?

MySql Select、Count(*) 和 SubQueries in Users<>Comments 关系

c# - Service Fabric 单元测试和依赖项注入(inject)

ruby-on-rails - 如何编写需要 OAuth2 访问 token 的 RSpec 测试?

测试 USSD 应用程序