Is mock Object the best way to test scheduling system with a lot of Time.now?

Hi everyone,     I hope everyone is doing well.    I am working on a scheduling system that dealing with Time.now a lot. It is getting tricky to write test code for the function.

   suppose a function in a model:

   def expired?         self.expire_time <= Time.now    end

   i was wondering what is the best way to test it. Or should I say that I should design the function in the following way (more testable?)

    def expired?(time)          self.expire_time <= time     end

    then I should use it in the following way : object.expired? (Time.now)     it is also easier to write test code.

    Any comments and suggestions will be greatly appreciated :slight_smile:

thanks Kevin

You could use Mocha (http://mocha.rubyforge.org) to temporarily stub the Time.now method for the duration of an individual test. Something like this...

require 'mocha'

def test_me specific_time = Time.parse('2007-01-01 06:30:00') Time.stubs(:now).returns(specified_time)

Time.now # => Mon Jan 01 06:30:00 +0000 2007 end

Wow~~ This is genius ~~ how simply the dirty work could be done !

Great thanks to James :slight_smile: