Following on from my last blog post about deriving Gherkin from conversations, I wanted to share some tips on tenses. This is beginner stuff, but it turns out there are a lot of beginners out there! It also isn’t gospel, so if you’re doing something different, it’s probably OK.
Contexts have happened in the past
When I phrase a context, I often put it in the past tense:
Given Fred bought a microwave
Sometimes the past has set up something which is ongoing in the present, but it’s not an action as much as a continuation. So we’ll either use the present continuous tense (“is X-ing”) or we’ll be describing an ongoing state:
Given Bertha is reading Moby Dick
Given Fluffy is 1 1/2 months old
It doesn’t matter how the context was set up, either, so often we find that contexts use the passive voice for the events which made them occur (often “was X-ed” or “has been X-ed”, for whatever the past tense of “X” is):
Given Pat’s holiday has been approved
Given the last bar of chocolate was sold
Events happen in the present
The event is the thing which causes the outcome:
When I go to the checkout
When Bob adds the gig to his calendar
I sometimes see people phrase events in the passive voice:
When the last book is sold
but for events, I much prefer to change it so that it’s active:
When we sell the last book
When a customer buys the last book
This helps to differentiate it from the contexts, and makes us think a bit harder about who or what triggers the outcome.
Outcomes should happen
I tend to use the word “should” with outcomes these days. As well as allowing for questioning and uncertainty, it differentiates the outcome from contexts and events, which might otherwise have the same syntax and be hard to automate in some frameworks as a result (JBehave, for instance, didn’t actually care whether you used Given, When or Then at the beginning of a step; it just told it there was a step to run).
Then the book should be listed as out of stock
Then we should be told that Fluffy is too young
I often use the passive voice here as well, since in most cases it’s the system producing the outcome, unless it’s pixies.
And that’s it!
Pingback: Gáspár Nagy on software | BDD Addict Newsletter July 2016
Pingback: Scenarios using custom DSLs | Liz Keogh, lunivore