ITKv3 Procedure for Adding a Test
Appopriate testing is the most important aspects of writing software.
How to Add a Test in ITK
The general procedure involves the following steps
- Write the test itself
- Add the Test to the Test Driver
- Add the Test to the CMakeLists.txt file
- Run the Test locally
- Submit an Experimental build
- Commit the Test to CVS
Write the test
Naming the file
Unit tests should be named with the name of the class they are testing and the word Test at the end.
For example:
- class itkBMPImageIO will have a test called itkBMPImageIOTest.cxx
- class itkIndex will have a test called itkIndexTest.cxx* itkBMPImageIOTest.cxx
Sometimes it may be necessary to have multiple tests, in which case a number will be added after the "Test" string of the name.
For example:
- itkBMPImageIOTest.cxx
- itkBMPImageIOTest2.cxx
- itkBMPImageIOTest3.cxx
Note that we skip the "1" entry. It is implicitly the first test.
Writing the content
The test file must contain a function that has the EXACT same name as the file (without the extension).
For example, the file itkBMPImageIOTest.cxx must contain a function
int itkBMPImageIOTest( int argc, char * argv [] )
The function must have a return value, and must be one of the following two options:
- EXIT_FAILURE
- EXIT_SUCCESS
Adding The Test to the Test Driver
ITK uses test drivers in order to manage the very large number of unit test. A test driver aggregates many test in a single executable by registering all of them as functions.
As a general guideline, there is a Test driver per major directory. The test driver is named after the directory that it is testing.
For example, the classes in the directory
Insight/Code/Algorithms
are tested by files in the directory
Insight/Testing/Code/Algorithms
and will use a test driver file called
itkAlgorithmsTests.cxx
Note that in some directories, there are so many classes that multiple test drivers are needed. In such cases they are named numerically as:
- itkAlgorithmsTests.cxx
- itkAlgorithmsTests2.cxx
- itkAlgorithmsTests3.cxx
- itkAlgorithmsTests4.cxx
In some cases, the reason for having multiple drivers is not necessarily the large number of tests that they aggregate, but their own code size, which tend to give trouble to some linkers (e.g. Borland).