Our preference is to automate the testing of all software products we develop where practical. This allows regression tests to be performed whenever changes are made to ensure the existing software functionality hasn't been adversely affected. We use Nunit for the test automation of .NET programs and an internally developed test runner for our C/C++ programs.
The following screen shot shows an example software development project in Microsoft's Visual Studio. We us an addin called Resharper to assist in developing C# programs and that includes an inbuilt test runner. This screen shots shows an automated run of all of the automated tests for an example development project. The example shows a successful test run where all of the automated tests passed. If there was a test failure it would appear as a red symbol highlighting a test failure.
We group the automated tests into four categories:
- In Memory Interaction Only
- Interacts with the Local Disk
- Interacts with the Local Network
- Long Running
These categories are typically indicative of how long it takes to run an automated test. The memory interaction test category can be viewed as unit tests and what are run regularly by a developer as they are developing. The other test categories can be viewed as integration tests. Rather than use the unit test/integration test terminology we have chosen to treat all of these as automated tests and put them into categories that are indicative of how long they take to run. Our continuous integration system then runs these automated tests whenever there is a source code changed detected in the revision control system.