My hate/love relationship with BDD
Some years ago I started getting into TDD. It took a bit of practice but, as some of my previous posts might suggest, I am completely hooked. BDD on the other hand… well that’s a different matter…
It was probably a good year or two after I got into TDD that I discovered BDD. BDD evolved from TDD and the claim is that it solves some of the problems involved with TDD. To me a lot of these seemed like non-issues, e.g.:
- Q. Where do you start the TDD process? A. Well what’s the simplest test you can write that will fail and allow you to write your first line of code?
- Q. What do you call the tests? A. Just describe what they’re proving.
- Q. What do you test and what don’t you test? A. Test everything, duh!
I felt that Dan North had built a fuzzy and overly wordy process around something simple and elegant.
The bottom-up approach I used for TDD was comfortable with me. You start with small building blocks, gradually increasing the complexity and, over time, tie them all together to create a well build, intricate system. The BDD examples I saw were much more “Outside-In”; Start by defining a high level feature (test) and that gives you a framework within which you can start coding.
It was only recently, when I started using SpecFlow (A .NET implementation of the Cucumber framework), that things started to slot in place and BDD become a whole lot more interesting to me. Here was a framework that allowed me to easily write very high level, readable tests to express end-to-end acceptance tests that poked almost every section of my applications.
Rather than replacing my TDD process with BDD, I now augment it. I’ve got a whole bunch of high level features written up in SpecFlow and can now guarantee the functionality that the user will see. I still find the “In order to… As a… I want to…” process a bit more “wordy” than I’m comfortable with but it definitely helps to give structure to the kind of feature tests I write.
Am I as hooked on BDD as TDD? Well I wouldn’t go that far, but I’m much more on board with the process and SpecFlow is certainly going to be one of the first things I pull in from Nuget for a lot of my projects from here on!