Time.now で指定した時間を返すようにする
Time.now を使うテストをしたくて、事前に設定した時間を Time.now が返すようにしてみた。Time._set_time に Time.parse が解析できる時間の文字列を指定し、Time.now を使うと、先ほど設定した時間を返すというものです。
require 'time' class Time class << self alias time_now_original now @fixed_time = nil def _set_time(time = nil) if time.nil? @fixed_time = nil else @fixed_time = Time.parse(time) end end def now if @fixed_time.nil? self.time_now_original else @fixed_time end end end end Time._set_time("2008 12/12 12:12:12") puts Time.now # => Sat Dec 12 12:12:12 +0900 2009 puts Time.now # => Sat Dec 12 12:12:12 +0900 2009 Time._set_time(nil) puts Time.now # => Thu Jan 08 23:31:10 +0900 2009