Ive been learning MVC2 and MVVM lately and I think it works like this.
ASP.NET MVC2 – Can test the whole web site using unit tests
ASP.NET MVC2 + jquery web service calls – Can no longer just use MSTest unit test. What is the MS product to test the javascript side?
ASP.NET Webforms – Unit Tests are near impossible when the coder doesnt create the Webforms site with Testing in mind. Therefore Asp.NET web performance tests are the closest thing to testing that is realistic. Coded UI Tests are too trivial to really be useful for things like ASP.NET validators.
ASP.NET Webforms + jquery web service calls – Can only unit test the web service calls. Cannot use Web Performance tests because of javsscript calls. Need some sort of javascript testing framework.
Silverlight – No tests. Maybe Coded UI Tests.
Silverlight MVVM – Use silverlight unit test framework to test ViewModel similiar to MVC.
Silverlight MEF – How does MEF affect testing scenerios if at all ?
Is this accurate? Is there anything I am missing ?
I am trying to make a argument to the people in charge that we should use MVC over Webforms so that we can create automated testing. As it is we are doing Webforms all in one project and impossible to test so people just test off of manual scripts 🙁
Rather than specifying the reasons why you should use MVC over Webforms, I’d take a step back and sell the management team on why you should use unit tests. After that’s sold you have a case of saying that MVC would allow you to do this more efficiently than webforms.
Are you looking at going the full TDD route, or just creating tests after? I’d highly recommend going down the TDD path even though it does have a steeper learning curve and will lessen your productivity while you are learning it.
Since you are already looking into testing, you probably know most of these, but I’ll re-iterate some of the benefits:
Less defects get through to QA.
Tests can be created for issues that QA and customers find.
Designing for testing creates a more loosely coupled application which tend to be more maintainable.
Increased developer confidence when making changes leading to sustained productivity as the application code base matures.
Tests are great documentation for new developers joining the project, as they can see what’s trying to be achieved.
Note: the cost of fixing a defect that has made it through to production can be up to 80 x the cost of finding and fixing it in the development and QA process (I’ll try to find my source for that figure).
Unit testing is only one piece of the puzzle though, you’ll also want to look at using a Continuous Integration server such as CruiseControl.NET to automate your builds and tests. This will make sure that everyone keeps the build in a working state.
For an existing Webforms project you might also want to look into the Web Client Software Factory. I’ve found it to be very useful for migrating legacy webforms apps over time, though it’s a little more convoluted than MVC2.