I repeatedly hear BDD enthusiasts advocate using both SpecFlow and MSpec in the same project.
Apparently SpecFlow is more suitable for outside-in/UI tests. (For example, web tests which simulate mouse-clicks, etc, using WatiN or something similar.)
Apparently MSpec is more suitable for unit-tests.
Now my question is - why use two frameworks which are incredibly similar and do virtually the same thing?
Why not instead:
I thought the reason we adopt BDD is so we can test behaviours, which are driven externally, by means of integration tests.
I don't see how/why this applies to unit tests.
I agree with Darren. Generally I think this is partly a cultural/learning thing.
If you want to have the business actively collaborating on the executable specification you do, you need business readability. So you need a BDD tool, like SpecFlow.
For unit testing, the "business" is you or the other developers in your team, so the only constraint is that you have to write your unit tests in a way that other developers can understand it (e.g. it's not a totally obscure code).
So whether you use NUnit, MSpec or even SpecFlow for unit testing should be decided based on what your team feels comfortable and efficient. It is very hard to give any concrete advise from outside. If your team is fluent with NUnit and just learning BDD/SpecFlow, I would keep the unit testing with NUnit. If your team is already addicted to given-when-then, it makes sense to try a few unit-level BDD tool and see what your team likes the best.
Personally I would be very careful using a plain-text-based (external DSL) tool (e.g. SpecFlow) for unit testing, but would rather go for tools that use fluent interfaces (internal DSL), like MSpec. But I know about teams that use SpecFlow for unit testing successfully.
I don't think your question is completely valid, because MSpec and SpecFlow are not incredibly similar and do not do virtually the same thing. Just look at the two side-by-side... they look nothing alike, and they work completely different.
The best advice I can give to you is to read The RSpec Book, which shows in detail how to do testing in Ruby with a combination of RSpec and Cucumber. Many of the ideas in this book can be applied to MSpec/SpecFlow in C# and .Net. It's the best explanation of the BDD process that I've read.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With