On Tue, Mar 4, 2008 at 8:13 AM, David Chelimsky <[EMAIL PROTECTED]> wrote:
> On Tue, Mar 4, 2008 at 7:13 AM, Matthijs Langenberg
>  <[EMAIL PROTECTED]> wrote:
>  > I really would like to know how people are using the Story and Example
>  > runner to write their software.
>  > It would be great to get some direction on it, because I think I'm missing
>  > some points.
>  >
>  > Taking the outside-in approach in thought:
>  >
>  > At first we write a high-level customer-facing story, this story fails.
>  > Then we start using mocks at object level to use them as a design tool,
>  > and so we implement the different layers of the system.
>  > After implementing the inner layer, the story should pass.
>  > When that happens we could remove the mocks and replace it with calls to 
> the
>  > real code,
>
>  I do this sometimes - removing the mocks - as long as the objects are
>  trivial to set up and they don't have dependencies that I don't want
>  to expose. There's no one way to do this, and I'll sometimes remove
>  mocks and reintroduce them over the life of a project.
>
>
>  > making the suite less brittle
>
>  What brittle means is a bit subjective here. Just a lengthy
>  conversation about this in irc last night. The guy with whom I was
>  chatting prefers to not use mocks because he'd rather see a change
>  cause a bunch of lower level examples to fail than stories. From what
>  I can tell, he doesn't like to use mocks even temporarily, in process.
>
>  His approach has the benefit that you learn about side effects of your
>  changes faster, and the cost that it means you sometimes have more
>  "red bar" to wade through while you get things right.
>
>  My approach has the benefit that you can address side effects of your
>  changes with a green bar helping you know that the smaller bits
>  (objects and methods) are functioning, and the cost that you sometimes
>  don't learn about side effects until you run your stories (or
>  integration suite).
>
>  Neither solution is perfect. You just have to pick your poison.
>
>
>  > (except for calls to external
>  > services/databases/file systems).
>
>  This is a funny thing about ruby, specifically rails.
>
>  One of the hallmarks of OO is a high level of decoupling - especially
>  decoupling your code from 3rd party code through adapters. There are a
>  couple of reasons for this.
>
>  One is that having an adapter lets you write exactly the code that you
>  want to write throughout most of your system, rather than being
>  subject to the naming conventions of the 3rd party library that might
>  clash with those in your system or even with your domain.
>
>  The other is that if you decide to switch to a different library,
>  you're pretty well hosed unless you have adapters. If you look at the
>  competitors to ActiveRecord, like Og and Datamapper, they are all VERY
>  similar syntactically. Why? Two reasons I think. One is that AR got a
>  lot of things right from a domain perspective. The other is that calls
>  to AR internals have leaked out to a lot of controllers and even
>  views:
>
>  Person.find(:all, :conditions => ['active = ?', true])
>
>  In spite of guidelines all over the web that say that this should be
>  wrapped in a #find_active method in the model, these sorts of things
>  pop up all over the place anyhow.

Finishing up that thought - find_active is an adapter - just at the
method level instead of the object level.

>  > So if the story passes all acceptance tests, why is there a need for
>  > examples at a lower level?
>
>  So that you can get things working one step at a time, and then change
>  things as needed one step at a time, with green bars keeping you sane,
>  stress free, and even happy all the way through.
>
>  HTH,
>  David
>
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to