Just finished a contract where we used SpecFlow to define our acceptance tests, and I have been using it on my personal projects for a while. Anyone using SpecFlow for a while quickly learns that you have to be careful how you organise your step definitions or you can get in a real mess. It is a great tool but if you tend to just dive in without first finding out the best practice it can be painful.
Recently I discovered SpecSalad. Duncan Butler has ported CukeSalad over to .NET for us and I for one am glad he did. Basically SpecSalad takes the pain away by allowing you to define your system as a set of Roles and Tasks. Steps are replaced by the Task and as each one is a separate class it is much easier to keep track or reuse. I won’t regurgitate the “how to” as Duncan has some great posts on his blog to get you started.
SpecSalad necessarily constrains the vocabulary you must use, but this has a cool side effect of making it easier for new adopters of BDD to learn the vocabulary. On my last project the vocabulary was somewhat of a hurdle for the business to getting on board and defining the acceptance tests, for much of it we the developers were defining acceptance tests after the fact, never a good thing in my book.