Writing BDD stories and implementing the steps you will soon come to the point to deal with references between steps, like:
Given I have a document A on disk
When I open document A
And I change the content of document A
And I save document A
Then document A on disk will be updated
And document A will contain the new content
Reading this you will find two references to be tracked:
- the document itself
- the content which got changed
I found many implemented solutions for this pattern, each of them a little different. Some using global variables and a central class to hold all steps, others using singletons.
Summarizing the solutions I found I introduced a new pattern which got quite positive feedback: the Reference Tracker.
The basic idea is that you will have three items to track:
- the type of the reference (here: document or content)
- the reference name (here: A once, unnamed the other)
- the actual reference value
Having this you just need two methods to feed the tracker and to retrieve values from it:
The cleanup()
method should ensure that you don’t collide with new scenarios. In JBehave context you should call it in @AfterScenario
.
For the example above you would implement the interface with:
- Key-Type: String (“document”, “content”)
- Value-Type: Object (once file, once String, XML or whatever)
The complete Gist contains another implementation called TypedReferenceTracker
which assumes that the value-type is the same as the key, so that there is a class for documents and one for contents. It makes the getter a little easier to use.
Find the complete Gist at GitHub.
No comments:
Post a Comment