我想使用the rollback pattern来测试我的服务。这些实际上是管理事务和处理由Winform UI调用的所有存储库访问的逻辑服务。存储库使用NHibernate进行数据库操作。
给定NHibernate doesn't support nested transactions,它不能在测试设置中开始事务并在拆除时回滚。我在中间执行的事务没有回滚。
我找到的唯一方法是更改服务类,以便我可以向其中注入在测试设置中创建的ITransaction
。但是这种方法将事务暴露给UI作为副作用,感觉就像改变我的实现只是为了测试。
有没有更好的方法来实现这一目标?欢迎任何建议或指示。
答案 0 :(得分:1)
我在之前的一份工作中碰到了同样的问题,老实说,情况非常棘手,我们最终通过测试数据库解决了这个问题。
基本思想是你有一些数据库的基线快照或基本设置脚本,你可以每天,每小时或每当测试运行时在测试服务器上运行 - 无论什么是合适的。我们处理它的方法是让SetUp方法通过调用脚本重置为基线;然后我们将完成所有测试,并在TearDown过程中再次重置为基线(如果需要)。
您甚至可以将基线位置设置为参数,这样您就可以从QA中获取不应该破坏任何内容的更改,如果您正在测试更改,则可以从本地基线中获取。总而言之,习惯这有点尴尬,但它运作良好,并没有阻碍我们的开发过程。