If you're serious about testing before long you'll bump into the need to do some mocking. You can of course chose to write your own mocks but that is hardly time effective or trivial. More than likely you'll want to use a framework, but how do you choose between the most popular options?
There's been some discussion on Twitter between myself and Daniel Cazzulino (@kzu), the creator of Moq (pronounced "Mock-you" or just "Mock"), a newer and popular .NET mocking, about mocking frameworks and what goes into choosing a mocking framework. Daniel and I share a passion in mocking and by extension testing. As the creator of Moq, I hold him in very high regard.
The discussion centered around some work that Andrew Kazyrevich has been doing recently. Andrew is passionate about mocking. As such he's created an open source project which compares the "big dawgs" of .NET mocking frameworks. In his introductory post he explains the intent, which is message I support and want to help spread:
I've started a small open source project. It provides a unified set of tests written against Moq, NMock2, Rhino Mocks and Typemock Isolator, so that you can easily compare the frameworks and make an informed decision when picking one up.
In Andrew's most recent post he compares the execution time of the various frameworks. My response on the RhinoMocks mailing list was terse but sincere:
Curious about speed in your tests, is the a first level concern when choosing a testing framework?
Daniel answered the question in a tweet:
IMO, API design, usability and expressiveness is a much more valuable comparison. #moq is not optimized for runtime perf.
To which I responded:
I would also throw in documentation, discoverability, and community into your equation.
So, fine blog reader, I have a question for you. If you are using a mocking framework, what are your first-level concerns when you chose your framework? For those who have yet to utilize a framework, what will you base your decision on when you do choose?
- Execution Speed
- API Design
- Discoverability (possibly coincides with API Design)
03-19-2009 11:02 PM