[rspec-users] Mocks? Really?

Pat Maddox pergesu at gmail.com
Sat Dec 15 02:17:12 EST 2007

On Dec 8, 2007 4:06 AM, Dan North <tastapod at gmail.com> wrote:
> I prefer the mantra "mock roles, not objects", in other words, mock things
> that have behaviour (services, components, resources, whatever your
> preferred term is) rather than stubbing out domain objects themselves. If
> you have to mock domain objects it's usually a smell that your domain
> implementation is too tightly coupled to some infrastructure.

Assuming you could easily write Rails specs using the real domain
objects, but not hit the database, would you "never" mock domain
objects (where "never" means you deviate only in extraordinary
circumstances)?  I'm mostly curious in the interaction between
controller and model...if you use real models, then changes to the
model code could very well lead to failing controller specs, even
though the controller's logic is still correct.

What is your opinion on isolating tests?  Do you try to test each
class in complete isolation, mocking its collaborators?  When you use
interaction-based tests, do you always leave those in place, or do you
substitute real objects as you implement them (and if so, do your
changes move to a more state-based style)?  How do you approach
specifying different layers within an app?  Do you use real
implementations if there are lightweight ones available, or do you
mock everything out?

I realize that's a ton of questions...I'd be very grateful (and
impressed!) if you took the time to answer any of them.  Also I'd love
to hear input from other people as well.


More information about the rspec-users mailing list