scala - 使用 Acolyte 模拟 JDBC 驱动程序 - 事务支持?
问题描述
我正在使用Acolyte模拟 JDBC 驱动程序并在 Scala 中测试我的数据库层。没关系,但我找不到任何方法来测试事务行为(提交、回滚......)。
基本上我有一些模拟 UnitOfWork 的东西,我想测试一下是否适当地调用了提交和回滚命令:
我有这样的东西
def executeUnitOfWorkNoResult(sqlInstructions: List[String])
(connectionFactory:()=>Connection): Try[Unit] = {
import implicits.TryImplicits._
var connection: Connection = null
Try {
connection = connectionFactory()
connection.setAutoCommit(false)
val execs = sqlInstructions.foldLeft(Try[Unit]())((tryInstance, sql)=> {
tryInstance.flatMap(t => {
val stmt:Statement = null
Try {
val stmt = connection.createStatement()
stmt.execute(sql)
()
}doFinally {
Try{stmt.close}
}
})
})
execs match {
case Success(_) => connection.commit()
case Failure(e) => {
connection.rollback()
throw e
}
}
} doFinally {
if (connection != null) {
Try(connection.close)
}
}
}
测试基本的东西很好,例如测试命令是否被执行:
"executeUnitOfWork" should " execute commands" in {
var insStmtCmt = 0;
val handlerA = AcolyteDSL.handleStatement.withUpdateHandler { e =>
if(e.sql.toLowerCase.startsWith("insert")){
insStmtCmt = insStmtCmt+1
}
UpdateResult.One
}
def acquireMock() = AcolyteDSL.connection(handlerA)
val res = SqlUtils.executeUnitOfWorkNoResult(List(
"insert into MetricDescription values('blaf','','','')",
"insert into MetricDescription values('blaf2','','','')"))(acquireMock)
res.isSuccess shouldBe true
insStmtCmt should equal(2)
}
但似乎不支持与交易相关的任何内容。
在文档中写到有一个伪支持,但我找不到它。
任何想法 ?
解决方案
推荐阅读
- html - 如何在侧栏菜单左侧添加 2 个图标?
- firefox - 为什么我的 D3.js GeoJSON 地图没有在 Firefox 中正确显示?
- drupal - 如何搜索civicrm的api?
- c# - 从 JSON 子级创建父级
- java - Spring data JPA抛出重复键值违反了唯一约束
- javascript - IOS - 确认用户是否想离开页面
- javascript - 在 APEX 交互式网格中编辑“行操作”菜单
- html - html css 代码未显示正确的设计
- java - 按特定参数对对象列表进行排序
- javascript - 使用 JSON 中的数组作为 c3.js 中的类别轴