summaryrefslogtreecommitdiff
path: root/lib/minitest/mock.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/minitest/mock.rb')
-rw-r--r--lib/minitest/mock.rb28
1 files changed, 25 insertions, 3 deletions
diff --git a/lib/minitest/mock.rb b/lib/minitest/mock.rb
index 99f7992aa9..adff7455a7 100644
--- a/lib/minitest/mock.rb
+++ b/lib/minitest/mock.rb
@@ -6,18 +6,40 @@
class MockExpectationError < StandardError; end
+##
+# A simple and clean mock object framework.
+
module MiniTest
+
+ ##
+ # All mock objects are an instance of Mock
+
class Mock
- def initialize
+ def initialize # :nodoc:
@expected_calls = {}
@actual_calls = Hash.new {|h,k| h[k] = [] }
end
+ ##
+ # 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
+
def expect(name, retval, args=[])
@expected_calls[name] = { :retval => retval, :args => args }
self
end
+ ##
+ # Verify that all methods were called as expected. Raises
+ # +MockExpectationError+ if the mock object was not called as
+ # expected.
+
def verify
@expected_calls.each_key do |name|
expected = @expected_calls[name]
@@ -28,7 +50,7 @@ module MiniTest
true
end
- def method_missing(sym, *args)
+ def method_missing(sym, *args) # :nodoc:
raise NoMethodError unless @expected_calls.has_key?(sym)
raise ArgumentError unless @expected_calls[sym][:args].size == args.size
retval = @expected_calls[sym][:retval]
@@ -37,7 +59,7 @@ module MiniTest
end
alias :original_respond_to? :respond_to?
- def respond_to?(sym)
+ def respond_to?(sym) # :nodoc:
return true if @expected_calls.has_key?(sym)
return original_respond_to?(sym)
end