[rspec-users] Mocks? Really?
dchelimsky at gmail.com
Mon Dec 17 16:08:32 EST 2007
On Dec 17, 2007 3:02 PM, Brian Takita <brian.takita at gmail.com> wrote:
> On Dec 17, 2007 11:02 AM, Scott Taylor <mailing_lists at railsnewbie.com> wrote:
> > On Dec 17, 2007, at 3:25 AM, Brian Takita wrote:
> > > On Dec 16, 2007 7:43 PM, Scott Taylor
> > > <mailing_lists at railsnewbie.com> wrote:
> > >>
> > >> Francis and Pat probably know my thoughts on this, already, but as
> > >> far as I can see it, mocks (at least the message based ones) are
> > >> popular for one reason in the rails / active-record world:
> > >>
> > >> Speed. Mocks are extremely fast. I don't think it's uncommon for
> > >> those who write specs for rails projects to have a full test suite
> > >> running in under 20 seconds if they are mocking all dependencies.
> > >> Primarily, this means using mocks for all associations on a Rails
> > >> model, and using only mocks for controller specs.
> > > My experience with AR is that AR itself (mainly object instantiation)
> > > is slow, not the queries.
> > > Mocking the queries did not result in a worthwhile test run time
> > > savings.
> > > Rails creates lots of objects, which causes lots of slowness. Its
> > > death by a thousand cuts.
> > >
> > > I guess one could mock out the entire AR object, but I'm not convinced
> > > that it would result in large performance benefits in many cases.
> > > I've tried doing this a couple of times and did not save much time at
> > > all. Of course, this was done in view examples on a project that uses
> > > Markaby (which is slow).
> > >
> > > Whatever you do, I recommend taking performance metrics of your suite
> > > as you try to diagnose the slowness. The results will probably be
> > > surprising.
> > Certainly. A lesson in premature optimization. Although, I did
> > notice that
> > my test suite took about half the time with an in-memory sqllite3
> > database,
> > so I would find it hard to believe that most of the time is spent in
> > object
> > creation - but...off to do some benchmarking.
> True. I also did some custom fixture optimizations. For some reason,
> instantiating a Fixture object instance is very slow. I've rigged it
> so there is only one instance of a Fixture object for each table for
> the entire process.
> Of course this would break fixture scenarios.
Did you do that in rspec? Or in your own project?
> I've had around 20-30% increases using in memory sqllite, about 1 year
> ago. I havn't tried it since.
> > Scott
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/rspec-users
> rspec-users mailing list
> rspec-users at rubyforge.org
More information about the rspec-users