我的模型类上有一个before_save
过滤器,它将日期字段设置为未来日期以保证数据的完整性。在Rails中覆盖before_save过滤器以用于测试目的
除了涉及到单元测试以外,这种方法非常有效。我想设置一个测试场景,其中包括将此日期字段设置为过去的日期。我无法使用ActiveRecord
来执行此操作,因为调用了before_save
筛选器并将日期更新为将来的日期。使用ActiveRecord::Base::connection.update
执行原始SQL的最佳方法是?
我的模型类上有一个before_save
过滤器,它将日期字段设置为未来日期以保证数据的完整性。在Rails中覆盖before_save过滤器以用于测试目的
除了涉及到单元测试以外,这种方法非常有效。我想设置一个测试场景,其中包括将此日期字段设置为过去的日期。我无法使用ActiveRecord
来执行此操作,因为调用了before_save
筛选器并将日期更新为将来的日期。使用ActiveRecord::Base::connection.update
执行原始SQL的最佳方法是?
也许利用一个模拟对象将是最好的。对于一个快速介绍到mock对象读取
http://erikonrails.wordpress.com/2008/05/07/how-to-use-mock-objects/
它可能被认为是一种破解,但您可以在单元测试中重新打开您的模型类并覆盖您的before_save
过滤器的实现。
如果你不允许发生这种情况,为什么你需要测试它发生的时间?
我的意思是,如果你永远不会允许过去的日期保存到那个模型中,那么你应该永远不会有那么那么有什么测试?
似乎应该做的唯一的测试是为了确保当您尝试保存一个过去的日期它处理它正确
我写的测试是不是这个模式,但它使用的模型后台工作类。当模型上的本地时间大于此日期(发生在我们应用程序的7天后)时,后台工作人员在模型上执行一项工作。由于我正在测试后台工作人员,因此我需要创建一个模型日期已过的场景。 – Olly 2009-06-01 15:02:52