【问题标题】:How to use the rollback pattern with NHibernate transactions?如何在 NHibernate 事务中使用回滚模式?
【发布时间】:2011-05-16 12:00:30
【问题描述】:

我想使用the rollback pattern 来测试我的服务。这些实际上是管理事务和处理所有存储库访问的逻辑服务,由 Winform UI 调用。存储库使用 NHibernate 进行数据库操作。

鉴于NHibernate doesn't support nested transactions,在测试设置中开始事务并在拆除时回滚是行不通的。我在中间执行的事务没有回滚。

我发现的唯一方法是更改​​服务类,以便我可以将在测试设置中创建的ITransaction 注入其中。但是这种方法会将事务作为副作用暴露给 UI,感觉就像只是为了测试而更改我的实现。

有没有更好的方法来实现这一点?欢迎任何建议或指导。

【问题讨论】:

  • 也许我没有正确理解,但是简单地使用 NHibernate 为您的测试提供的内存数据库有什么特别的问题吗?当您的数据库在测试脚本结束时过期时,您不必担心回滚测试。
  • 感谢您的回答。这更像是一个集成测试,我想针对 Sybase Anywhere 数据库进行测试,它有一些怪癖。在单元测试中,我选择内存数据库。
  • 哦,明白了。我在上一份工作中做过这样的事情——它可能不适合你的情况,但至少是这样。一会儿我打字。

标签: c# nhibernate testing transactions


【解决方案1】:

我在以前的一份工作中遇到了同样的问题,老实说,情况非常棘手,我们最终通过测试数据库来回避这个问题。

基本的想法是,您有一些用于数据库的基线快照或基本设置脚本,您可以每天、每小时或每当测试运行时在测试服务器上运行它们——只要合适。我们处理它的方法是让 SetUp 方法通过调用脚本重置为基线;然后,我们将进行所有测试,并在 TearDown 过程中再次重置为基线(如果需要)。

您甚至可以将基线位置设置为参数,这样您就可以从 QA 中提取不应该破坏任何内容的更改的基线,如果您正在测试更改,则可以使用本地基线。总而言之,习惯了有点尴尬,但效果很好,并没有让我们的开发过程陷入困境。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 2011-10-01
    • 2011-04-07
    • 2019-07-11
    • 2021-03-20
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多