class MiniTest::Mock

All mock objects are an instance of Mock

Public Instance Methods

__call(name, data) click to toggle source
# File lib/minitest/mock.rb, line 53
def __call name, data
  case data
  when Hash then
    "#{name}(#{data[:args].inspect[1..-2]}) => #{data[:retval].inspect}"
  else
    data.map { |d| __call name, d }.join ", "
  end
end
expect(name, retval, args=[]) click to toggle source

Expect that method name is called, optionally with args, and returns retval.

@mock.expect(:meaning_of_life, 42)
@mock.meaning_of_life # => 42

@mock.expect(:do_something_with, true, [some_obj, true])
@mock.do_something_with(some_obj, true) # => true

args is compared to the expected args using case equality (ie, the '===' operator), allowing for less specific expectations.

@mock.expect(:uses_any_string, true, [String])
@mock.uses_any_string("foo") # => true
@mock.verify  # => true

@mock.expect(:uses_one_string, true, ["foo"]
@mock.uses_one_string("bar") # => true
@mock.verify  # => raises MockExpectationError
# File lib/minitest/mock.rb, line 47
def expect(name, retval, args=[])
  raise ArgumentError, "args must be an array" unless Array === args
  @expected_calls[name] << { :retval => retval, :args => args }
  self
end
verify() click to toggle source

Verify that all methods were called as expected. Raises MockExpectationError if the mock object was not called as expected.

# File lib/minitest/mock.rb, line 67
def verify
  @expected_calls.each do |name, calls|
    calls.each do |expected|
      msg1 = "expected #{__call name, expected}"
      msg2 = "#{msg1}, got [#{__call name, @actual_calls[name]}]"

      raise MockExpectationError, msg2 if
        @actual_calls.has_key?(name) and
        not @actual_calls[name].include?(expected)

      raise MockExpectationError, msg1 unless
        @actual_calls.has_key?(name) and
        @actual_calls[name].include?(expected)
    end
  end
  true
end