Class: Mocha::Mock
Overview
Traditional mock object.
All methods return an Expectation which can be further modified by methods on Expectation.
Instance Method Summary (collapse)
-
- (Expectation) expects(method_name_or_hash, backtrace = nil)
(also: #__expects__)
Adds an expectation that the specified method must be called exactly once with any parameters.
-
- (Mock) responds_like(responder)
(also: #quacks_like)
Constrains the Mock instance so that it can only expect or stub methods to which responder responds.
-
- (Expectation) stubs(method_name_or_hash, backtrace = nil)
(also: #__stubs__)
Adds an expectation that the specified method may be called any number of times with any parameters.
- - (Object) unstub(method_name)
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
- (Object) method_missing(symbol, *arguments, &block)
194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/mocha/mock.rb', line 194 def method_missing(symbol, *arguments, &block) if @responder and not @responder.respond_to?(symbol) raise NoMethodError, "undefined method `#{symbol}' for #{self.mocha_inspect} which responds like #{@responder.mocha_inspect}" end if matching_expectation_allowing_invocation = @expectations.match_allowing_invocation(symbol, *arguments) matching_expectation_allowing_invocation.invoke(&block) else if (matching_expectation = @expectations.match(symbol, *arguments)) || (!matching_expectation && !@everything_stubbed) matching_expectation.invoke(&block) if matching_expectation = UnexpectedInvocation.new(self, symbol, *arguments).to_s << @mockery.mocha_inspect raise ExpectationError.new(, caller) end end end |
Instance Method Details
- (Expectation) expects(method_name) - (Expectation) expects(expected_methods_vs_return_values) Also known as: __expects__
Adds an expectation that the specified method must be called exactly once with any parameters.
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/mocha/mock.rb', line 51 def expects(method_name_or_hash, backtrace = nil) iterator = ArgumentIterator.new(method_name_or_hash) iterator.each { |*args| method_name = args.shift ensure_method_not_already_defined(method_name) expectation = Expectation.new(self, method_name, backtrace) expectation.returns(args.shift) if args.length > 0 @expectations.add(expectation) } end |
- (Mock) responds_like(responder) Also known as: quacks_like
Constrains the Mocha::Mock instance so that it can only expect or stub methods to which responder responds. The constraint is only applied at method invocation time.
A NoMethodError will be raised if the responder does not #respond_to? a method invocation (even if the method has been expected or stubbed).
The Mocha::Mock instance will delegate its #respond_to? method to the responder.
159 160 161 162 |
# File 'lib/mocha/mock.rb', line 159 def responds_like(responder) @responder = responder self end |
- (Expectation) stubs(method_name) - (Expectation) stubs(stubbed_methods_vs_return_values) Also known as: __stubs__
Adds an expectation that the specified method may be called any number of times with any parameters.
87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/mocha/mock.rb', line 87 def stubs(method_name_or_hash, backtrace = nil) iterator = ArgumentIterator.new(method_name_or_hash) iterator.each { |*args| method_name = args.shift ensure_method_not_already_defined(method_name) expectation = Expectation.new(self, method_name, backtrace) expectation.at_least(0) expectation.returns(args.shift) if args.length > 0 @expectations.add(expectation) } end |