On Jul 25, 2008, at 12:32 AM, Matt Lins wrote:

I suppose the way I'm defining the stubs, differs from what Dave is
doing in his example.

I assumed that:

MyModel = mock('MyModel Class', :count => 1)

was the same as:

MyModel.stub!(:count).and_return(1)

Nope.  Not even close.  Here's an equivalent of the first form:

Object.send :remove_const, :MyModel
MyModel = <a mock object>

and here's the second form:

MyModel.instance_eval do
  def count
    1
  end
end

(or:)

MyModel.class_eval do
  class << self
    def count; 1; end
  end
end

Scott




But, I'm starting to think they are not.  I haven't looked at the
rSpec internals to verify, other than the parameter name:

stubs_and_options+ lets you assign options and stub values
at the same time. The only option available is :null_object.
Anything else is treated as a stub value.

So, is this problem?

Yeah - so here are two related, but not equivalent ideas: mock objects, and stubs. A stub is just a faked out method - it can exist on a mock object (a completely fake object), or on a partial mock (i.e. a real object, with a method faked out). mock('My mock") is a mock object, MyRealObject.stub!(:foo) is a real object with the method foo faked out.

What is the difference between a mock object and a fake object? A mock object will complain (read: raise an error) any time it receives a message which it doesn't understand (i.e. one which hasn't been explicitly stubbed). A real object will work as usual. (A null object mock is a special type of mock - one which never complains. For now, you shouldn't worry about it).

Hope this helps,

Scott

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to