[rspec-users] Mocks? Really?

David Chelimsky 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
> http://rubyforge.org/mailman/listinfo/rspec-users
>


More information about the rspec-users mailing list