我正在编写测试,并为必须回滚异常而感到困扰。
raise ActiveRecord::Rollback
我为此感到困扰的原因是,我需要回滚以保持数据库清洁,以便下次测试运行。没有异常事件。
这与异常的想法背道而驰。除此之外,例外是昂贵的。
因此,还有其他回滚方法吗?还是我的担忧听起来不太好(如果可以,请解释原因)?
我忘了提及我的应用程序是使用ActiveRecord和迷你测试的Sinatra应用程序。
我认为您的顾虑一般。在大多数情况下,例外的代价很高,因此不应期望。
但是,根据ActiveRecord :: Rollback的文档,此异常有些独特。它的意思是“区别于其他异常情况的故意回滚”。
引用文档:
ActiveRecord :: Transactions :: ClassMethods#transaction使用此异常将故意回滚与其他异常情况区分开。通常,引发异常将导致事务方法回滚数据库事务并传递异常。但是,如果引发ActiveRecord :: Rollback异常,则数据库事务将回滚,而不会传递该异常。
如果Rails以这种方式专门使用它,那么确实没有理由不为此(或任何其他相关)目的使用它。
如此说来,正如Sergio和Dan在评论中指出的那样,许多人似乎更喜欢Rails的事务处理夹具或数据库清理器之类的简单性,而不是创建自定义解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句