2011-05-16 63 views
0

我想用the rollback pattern来测试我的服务。这些实际上是管理事务并处理由Winform UI调用的所有存储库访问的逻辑服务。存储库使用NHibernate进行数据库操作。如何在NHibernate事务中使用回滚模式?

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

我发现的唯一方法是更改​​服务类,以便我可以注入在测试设置中创建的ITransaction。但是这种方法将交易作为副作用暴露给用户界面,并且感觉像改变我的实现仅仅用于测试。

有没有更好的方法来实现这一目标?任何建议或指示,欢迎。

+0

也许我没有正确理解,但是在使用NHibernate为您的测试提供的内存数据库中存在一个特殊的问题?无论如何,当您的数据库在测试脚本末尾过期时,您无需担心回滚测试。 – tmesser 2011-05-16 13:55:34

+0

感谢您的回答。这更像是一个集成测试,我想测试一下Sybase Anywhere数据库,它有一些怪癖。在单元测试中,我使用内存数据库。 – henginy 2011-05-16 14:03:31

+0

哦,gotcha。在我上一份工作中,我做了这样的事情 - 这可能不适合你的情况,但至少是某种事情。片刻,当我打字时。 – tmesser 2011-05-16 14:06:58

回答

1

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

其基本思想是,您有一些基线快照或数据库的基础安装脚本,您可以每天,每小时或每当测试运行时在测试服务器上运行 - 任何适当的操作。我们处理它的方式是通过调用脚本使SetUp方法重置为基线;然后我们将执行所有测试,并在TearDown过程中再次重置基线(如果需要的话)。

您甚至可以将基线位置设置为参数,以便您可以从质量检查中获取不应该破坏任何内容的变更的基线,以及在测试变更时采用本地基线。总而言之,习惯使用起来有些尴尬,但它运行良好,并没有阻碍我们的开发过程。