当前位置: 首页 > 知识库问答 >
问题:

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

端木权
2023-03-14
tx, _ := db.Begin()
defer tx.Rollback()

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

if !err {
  tx.Commit()
}
    null
  • 通过函数注入到正在进行db操作的方法中进行monkey修补,并在测试中更改此函数
  • 通过使foosql全局化来更改猴子补丁-我不太喜欢
  • 使数据库在测试时间内不允许删除操作

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

共有1个答案

慕容玉堂
2023-03-14

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

 类似资料:
  • 我为教育阿帕奇骆驼交易编写了此代码 我在发生错误后使用事务处理,我必须触发事务回滚,但由于某种原因,消息保留在SAMPLE_2和SAMPLE_3队列中。为什么? 更新: 我添加了豆子 并修复路线,但这对我没有帮助: 我在文档中找到了这个配置 如何从这个xml创建bean?

  • 我在使用@Transactional注释进行事务回滚时遇到了一个问题。 我在backingbean、service和dao类中有以下方法:

  • 测试将创建的数据保存在H2测试数据库中,随后的测试在测试套件中执行时将失败。 我如何用事务绕过类的所有测试,并在类的所有测试执行后回滚所有数据库修改?

  • 问题内容: 我正在运行一个简单的JUnit测试,又是一个应用程序DAO。问题是我总是得到: JUnit测试是: 如你所见,我明确声明不回滚此方法。 Spring JUnit支持是否总是将rollback设置为true? 问题答案: 它应该可以正常工作,就像你期望的那样,但是可能是你在被测类中打开了另一个事务,或者某个地方有其他功能/或错误。 顺便说一句,这个注释应该是足够的:

  • 我正在努力做一个工作junit测试,以回滚在骆驼路由过程中发生的操作。 我有一个骆驼路线设置,可以监听目录。它需要一个csv文件。当csv文件出现时,它会创建新的SearchAnalytics数据。它会在csv文件中的每一行向表中添加新行。 我放的默认的Spring事务方法似乎不适用于骆驼路由上发生的操作。 下面的代码可以工作。但是它会永久保存数据,并且不会回滚插入。这意味着测试只会通过一次,除非