Learn More





DNN Community Blog

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

Test, Build, Test, Build

I have been having some fun recently with TDD or Test Driven Development.

For those of you who who haven't experienced this development technique the concept is simple in theory, but is such a paradigm shift that it takes a bit of getting used to.

The idea is simple - the first thing you do is to write a test, and then develop the code until the test passes.  The idea is that you only build what you need to get the test to pass.  The results aof this process is that the code is "less bloated",  and of course if done correctly every line of code can be tested independent of other components of the application.

There are a number of testing frameworks, NUnit, MBUnit and MSTest, and the Visual Studio testing tools, while they default to the built in Unit Testing framework can be configured to use the framework of your choice.

So how do you go about this in Visual Studio?  The basic process is as follows, and assumes that we are starting from scratch.  The details of the steps are left for the reader to research.

  1. Create a new Solution.
  2. Add a "Test" project - this is a special project template that automatically creates a "test" class wired up to use the Visual Studio Testing framework.
  3. The Class file will have a template class method with a "[TestMethod]" attribute.  Add your test code to this method. For example - this is a test from an MVC project I am working on.

  4. Try and run the test.  The test will not build as you haven't created the actual code yet, in this case the "IndividualsController" class and the List method.
  5. Addthe "real " project, add the class file and create the correct method signature - so the code builds.

  6. Try and run the test - this time the test should build - as long you created the method signature properly - but the test will fail as we haven't implemented the body of the method yet. 
  7. Next implement the code body.

  8. Rerun the test - and if you implemented it correctly the test will pass. 

    Note that the code above is the current status of the method.  In order to pass the test the only line neccessary is the first line and the last line.  The if /else blocak was added to satisfy a second test.

While TDD purists would say you should do every step as outlined, most TDD developers in practice do not run the test at step (6) that they know will fail. 

As you build up your tests, you will get a report like this

It really is cool to see all those "green" lights.

I have found that while it has taken me a little longer to build this project - as I learned to work with the new paradigm, I am now at the stage where adding a new feature is taking much less time as I do not find myself needing to browse to the test site to check the code is working.  In fact, in this project I had something like 20 - 25 tests working before I even fired up the browser the first time, and as I had created tests that passed for all layers of the application, the browse test worked first time.

Phillip Beadle has been working on a module template to help guide module developers to create modules using this development paradigm - so if you are interested in this methodology keep checking back here for news.



Comment Form

Only registered users may post comments.


2sic Daniel Mettler (125)
Aderson Oliveira (15)
Alec Whittington (11)
Alex Shirley (10)
Andrew Nurse (30)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (22)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (203)
Chris Paterra (55)
Clinton Patterson (28)
Cuong Dang (21)
Daniel Bartholomew (2)
Dave Buckner (2)
David Poindexter (3)
David Rodriguez (2)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (74)
Geoff Barlow (6)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (270)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matthias Schlomann (15)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Mike Horton (19)
Mitchel Sellers (28)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Peter Donker (52)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott S (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (2)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (37)
Will Strohl (163)
William Severance (5)
Try Evoq
For Free
Start Free Trial
a Demo
See Evoq Live
Need More Information?