On Jul 23, 7:41 pm, Ben Mabey <b...@benmabey.com> wrote: > 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
Ben and I are secretly the same person. _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users