[rspec-users] Constraints / Global requirements
matt at mattwynne.net
Wed Jan 7 15:46:59 EST 2009
On 7 Jan 2009, at 17:23, Steve Molitor wrote:
> I have two related questions: What is the best way to express
> global requirements, and how does one do it in Cucumber. The first
> question is the one I'm most interested in right now.
> By a global requirement I'm talking about requirements like 'all
> emails must be formatted like this...' Some people call them
> constraints, but I'm focusing on UI or business rules, not technical
> things. I can think of two approaches: put the global constraints
> in one place and reference these features in other features. The
> other point of view is that no, we want to see these rules in every
> feature that uses them, so we (customers, BAs, developers, testers)
> can see everything in one place. For example I can reference the
> different valid and invalid email scenarios in both the 'add new
> patient' and the 'add new doctor' features. Or I can copy and paste
> the email scenarios directly into the 'add new patient' and the 'add
> new doctor' features.
> As a DRY infected developer I prefer the first approach. However I
> have not found a simple way to have one cucumber feature reference
> or 'include' another, and have both features get executed. Perhaps
> partially for that reason, other people on my project want to use
> the second approach as it seems more straight forward.
> I realize I can reuse steps. But I want to reference the actual
> feature in another. To pick a more important example, in my past
> life I worked on a big leasing application with lots of formulas:
> to compute the cost of a lease, the cost of fuel cards, the cost of
> different levels of insurance, etc. I'm going to simply a lot, but
> say the formula for computing the sales tax is 'subtotal + subtotal
> * 0.5'. Calculating the sales tax is one feature. Two other
> features are 'compute lease cost' and 'compute fuel card cost'.
> They both need to add sales tax. This was before cumber and
> stories, but some of us preferred the specifications to look like
> LEASE COST FORMULA:
> a + b + sales tax.
> Others, especially the testers, preferred:
> a + b + (a + b * 0.5)
> In real life the sales (and use) tax calculation was quite complex
> and changed. When it changed this broke many manual test plan and
> invalidated many use cases. If we were using cucumber with the
> second approach it would break many features.
> Sorry for rambling on so long but I've found this is a hard question
> to articulate.
I think you might need to try and let go of the idea that your
Cucumber acceptance tests should be a *complete specification* and
instead focus on making sure that there is *just enough* specification
so that you can be sure to be alerted by the tests if something is
wrong. Any more is likely to do more harm than good.
I noticed you called yourself a 'DRY infected developer'. Duplication
is undoubtedly the root of all evil in production code, but there are
times when it pays to allow a little slack in. Check out this article
from Dan North:
More information about the rspec-users