In September of 2004 I met
James Newkirk at the Microsoft Patterns and Practice Summit in Reston Virginia. If you don't know James, among other accomplishments he was one of the creators of
NUnit. At the summit I stopped him to express my appreciation for NUnit. A conversation ensued in which he caught me off guard with the question: What is missing from NUnit?
Well, it's been over two years, but I finally have an answer: Mocks and Stubs
As long as I've needed them, Mocks have been available as additional libraries. When I was using NUnit I used
NMock and when using
Test::Unit I use
Mocha. But, why are these libraries not simply included in xUnit frameworks?
In 2004 I was also introduced to Behavioral Testing as a formal concept. I had been using mocks for a bit; however, it was wile reading
Mocks Aren't Stubs by
Martin Fowler when the difference between state and behavioral testing became clear. Martin concludes the write up with the following question and answer:
So which style is the best?
I find this a difficult question to answer with confidence.
It's been more than two years since Mocks Aren't Stubs was originally published and both behavioral and state based testing still exist. I'm skeptical that either will ever be declared better for all cases.
I can't imagine having to choose either behavioral or state based testing exclusively. Both have their pros and cons and, I believe, should be used accordingly. So why then do xUnit implementations continue to ignore support for behavioral testing?
Given that the tests we write as developers have matured, I believe it's fair to expect our xUnit frameworks to evolve with our needs.