Progress made
I just wanted to highlight a quote from Scott Guthrie’s recent post on MVC (emphasis mine):
VS 2008 Professional now includes built-in testing project support for MSTest (previously in VS 2005 this required a Visual Studio Team System SKU), and our default ASP.NET MVC project template automatically creates one of these projects when you use VS 2008.
We’ll also be shipping project template downloads for NUnit, MBUnit and other unit test frameworks as well, so if you prefer to use those instead you’ll also have an easy one click way to create your application and have a test project immediately ready to use with it.
I know it’s not all the way to “convention over configuration”, but it is nice that the tool now says, “oh you want to create a website? Ya gonna need tests.” Now it’s a conscious decision on the part of the developer to “opt-out” of tests, instead of opting-in. Just another way a tool can help guide good decisions.
As it’s looking like unit testing is becoming a first-class citizen in both the tools and the frameworks, I think it’s time for me to jump ship. Mainstream is for chumps. But seriously, it’s nice to see that testing concerns are becoming more mainstream, though I think that it just means the community needs to double their efforts in this precarious stage, such that growth continues in the right direction. I don’t want to unwind a bunch of bad design, habits, and practices just because the tooling made it easy.
I do still get demos of “right-click class in Solution Explorer, click ‘Generate Unit Tests’, watch bugs disappear!”, so there’s some work needed on the marketing front. Unfortunately, I saw a lot of not-so-technical decision makers nodding their head and asking, “can the unit test template also do null checking?” “Can my tool be so awesome and RAD, can I skimp and hire brain-dead developers?” “Does this mean I don’t have to train people how to be good developers, just good tool-users?”
This is a tangent, but slick tooling can help lower the barrier, but it can also take the user in a direction they don’t want to go (or don’t know they shouldn’t go).