Marcelo de Moraes Serpa wrote:
Hello list,
>From what I could see, the lines between mocks and stubs are subtle,
but the general idea I got is that mocks set expectations and stubs
are only dummy objects/method calls. What confused me though, is that
the stub() method is an alias for mock() in
Spec::Mocks::ExampleMethods. So a stub is a mock?
Yes, no, and maybe so. :p I agree with your general understanding that
"mocks set expectations and stubs are only dummy objects/method calls".
The fact that rspec using the same machinery to provide stubs and mocks
is really inconsequential because the deciding factor of what they are
is how you use them. You can, IMO, use a "mock" like a stub and a
"stub" like a mock.. Take this for example:
describe "#some_method" do
it "delegates to some_obejct" do
some_object = stub('some object', :some_method => "foo")
my_object = MyObject.new(some_object)
my_object.some_method.should == "foo"
end
end
We are using a stub as a dummy object, and yet our expectation is
clearing testing the method call. So is the above a stub or is it
really a mock? I would say that it is acting like a mock. I hope that
others on the list will correct me if I am wrong making this
observation/conclusion. Likewise we could use a mock as a dummy object
and never set any expectations on it and it would be acting like a
stub. Even though stub and mock is the same in RSpec you should still
use the correct name when using them.
Also, another thing that is confusing: You have stub and stub! methods
in the Spec::Mocks::Methods namespace, what is the difference between
Spec::Mocks::ExampleMethods#stub and Spec::Mocks::Methods#stub ?
Spec::Mocks::ExampleMethods are the methods that you can call during the course of a code example.
So when you say stub("something") the method in Spec::Mocks::ExampleMethods gets called
and returns you a stub. Now, that stub object now has it's own #stub method which lives on
Spec::Mocks::Methods#stub. That call will stub out the provided method and return value... So
my_stub.stub(:foo, "bar"), however that is aliased from #stub! which is used most often.
This is all from memory so I could be wrong but that is the general gist of it.
HTH,
-Ben
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users