Tuesday, October 23, 2012

To use Cucumber or Not to

Cucumber is fun to use. It it really cool to see plain english statements come to life and different pieces of code executed when those are english lines are executed. Gherkin syntax is great too. It has so much potential. Using a handful of simple keywords you can express any scenario and combined with cucumber you can execute them. Wonderful !

Then my developer brain came into action with all the principles around DRY (Don't repeat yourself) and WET (Write Everything Twice) highlighted. Does DRY apply to gherkins? It probably does. Take these two steps in different feature files for example:

And User A can view the message posted by User B

And User can view the message posted by the other user

These are two different lines of english meaning the same thing. These are the kind of gherkins different people would write about the same step or the scenario. If we already have the step #1 implemented we may apply the DRY principle and not implement step #2 once again. Now, how do I know if these two steps match and have the same implementation? By collaboration and by looking into the implemented step - right? Well the problem is - this takes time. Specially when the test suite is large this takes even more time. Now let's say all this collaboration and code inspection is done and it is concluded that the steps are the same we may want to edit the gherkin and replace the step #2 with step #1.

I call this whole process - "Normalization of Gherkins".

When is this done? When the step is being implemented
Who does that? Well, since this is a collaborative effort - everyone is involved.
If the developer who is implementing this does not have any idea that the step #1 above is already implemented in some other stepdef file the new (re)implementation of step #2 will be done.

So what happened here?
We are thrilled by the idea of automating any simple line of english that can be written by anyone but we still want reusability. So here comes a choice -

- Do you have people outside of your team who care about gherkins? If so, then evaluate using cucumber.
- Do you NOT have people outside of your team who care about gherkins? If so, then consider not using cucumber.

Let me get my message straight here. I am saying this about cucumber - to evaluate using it or not using it. However I think there is a lot of value in gherkins. What I am saying is evaluate the use of cucumber.

So - If you choose not to use cucumber how would you automate your gherkins then? Use unit testing frameworks to hit webdriver or something! I guess at this point I will leave this post here leaving a few questions unanswered for the next few posts. These questions are -
- How would simple junits consume gherkins?
- Could I get the same kind of report from junits the way I get it from cucumber?

Stay tuned for some thoughts around these.

No comments:

Post a Comment