[rspec-users] [OT] Object Mother vs Test Data Builder (was Jay Fields' blog on developer testing)

Jim Morris wolfmanjm at gmail.com
Sat Feb 7 21:34:23 EST 2009

Yet another way to do fixtures/factories is a hybrid that I outline in
my blog, its basically what I do.


Basically I can't use the existing libraries as I am not using

On Feb 5, 8:17 am, Ben Mabey <b... at benmabey.com> wrote:
> David Chelimsky wrote:
> > I highly recommend this blog post by Jay Fields:
> >http://blog.jayfields.com/2009/02/thoughts-on-developer-testing.html
> > Cheers,
> > David
> > _______________________________________________
> > rspec-users mailing list
> > rspec-us... at rubyforge.org
> >http://rubyforge.org/mailman/listinfo/rspec-users
> Great post.  Very down to earth and realistic.
> This post raised a question for me.  Jay talks about how the pattern
> Object Mother gave way to Test Data Builders.  I use Fixjour ("Word to
> your object mother")[1], and other similar projects in my apps to
> provide a set of sane default attributes for my models.  You can then
> easily override those defaults by passing in a hash with the values that
> you need for the test.  After reading Nat's post about Object Mother vs
> Test Data Builders[2] , I have come to the conclusion that the "Object
> Mother" libs that are popular in ruby land (i.e. Fixjour, Factory Girl)
> are really more in line with the Test Data Builder pattern.  Does
> everyone agree with this conclusion or am I missing something?  It may
> be that I just use it differently, but according to Nat's post Test
> Builders provide a sane set of defaults that you can then explicitly
> override like so:
> Invoice invoiceWithNoPostcode = new InvoiceBuilder()
>     .withRecipient(new RecipientBuilder()
>         .withAddress(new AddressBuilder()
>             .withNoPostcode()
>             .build())
>         .build())
>     .build();
> Well.. this looks a lot like what I do in Ruby (but a lot more verbose):
> invoice_with_no_postcode = new_invoice(:recipient =>
> new_recipient(:address => new_address(:postcode => nil)))
> Nat points out that problems with Object Mother arise when people start
> adding factory methods to deal with the edge cases, such as
> ObjectMother.new_invoice_with_no_postal_code.  I totally agree that this
> would be a problem since such abstraction results in hard to follow
> tests (this is why I hate fixtures actually).  From the projects I have
> worked on I haven't seen the Object Mother libs abused this way and they
> are used more like a Test Data Builder.  The only difference I see is in
> implementation, meaning the ruby libs tend to group all the factory
> methods on one object or module just like Object Mother, while the
> pattern Nat describes uses a separate builder class for each object.  I
> think this is really just details though and results from Ruby's
> differences from Java.
> Any thoughts?  Are Ruby's Object Mothers really Test Data Builders?
> -Ben
> 1.http://github.com/nakajima/fixjour/tree/master
> 2.http://nat.truemesh.com/archives/000714.html
> _______________________________________________
> rspec-users mailing list
> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users

More information about the rspec-users mailing list