diff --git a/lib/minitest/mock.rb b/lib/minitest/mock.rb index cc4eea3c..8f556c01 100644 --- a/lib/minitest/mock.rb +++ b/lib/minitest/mock.rb @@ -62,20 +62,25 @@ def verify end def method_missing(sym, *args) # :nodoc: - unless @expected_calls.has_key?(sym) + expected = @expected_calls[sym] + + unless expected then raise NoMethodError, "unmocked method %p, expected one of %p" % [sym, @expected_calls.keys.sort_by(&:to_s)] end - unless @expected_calls[sym][:args].size == args.size - raise ArgumentError, "mocked method '%s' expects %d arguments, got %d" % - [sym, @expected_calls[sym][:args].size, args.size] + expected_args, retval = expected[:args], expected[:retval] + + unless expected_args.size == args.size + raise ArgumentError, "mocked method %p expects %d arguments, got %d" % + [sym, expected[:args].size, args.size] end - retval = @expected_calls[sym][:retval] - args_case = @expected_calls[sym][:args]. - each_with_index.map{|a, i| a if a === args[i]} - @actual_calls[sym] << { :retval => retval, :args => args_case } + @actual_calls[sym] << { + :retval => retval, + :args => expected_args.zip(args).map { |mod, a| mod if mod === a } + } + retval end diff --git a/test/test_minitest_mock.rb b/test/test_minitest_mock.rb index 6732932e..8ab1847b 100644 --- a/test/test_minitest_mock.rb +++ b/test/test_minitest_mock.rb @@ -52,7 +52,7 @@ def test_blow_up_on_wrong_number_of_arguments @mock.sum end - assert_equal "mocked method 'sum' expects 2 arguments, got 0", e.message + assert_equal "mocked method :sum expects 2 arguments, got 0", e.message end def test_blow_up_on_wrong_arguments