Running the Unit Tests¶
Overview¶
We use CTest for building and running our unit tests. This wraps the underlying cxxtest or other (e.g. pyunit) test code.
CMake/CTest: Command Line¶
The unit tests are currently excluded from the ‘all’ target. To build all of the tests, including the dependent framework code run:
cmake --build . --target AllTests
To build only one package of tests (and its dependencies):
cmake --build . --target KernelTest
To run all the tests:
ctest -j8
To build and run all the tests in one shot:
cmake --build . --target check
To run a specific test or set of tests (will run all those that match the search string):
ctest -R KernelTest_TimerTest
So to run all tests in a suite (using a search string):
ctest -j8 -R KernelTest
To exclude things from your tests (matches the string as with the -R option) - useful for those building the performance tests:
ctest -j8 -E Performance
Useful CTest Options¶
ctest -h
gives the full list of command line arguments. Some useful
ones to note are:
--output-on-failure
: displays the log and any stderr output that is otherwise hidden by CTest.--schedule-random
: run the tests in a random order. Useful to weed out accidental dependencies--repeat-until-fail
: require each test to run times without failing in order to pass. Useful to try and find random failures
Running Unit Tests Directly¶
Starting in your build folder:
Running an entire test suite (e.g. KernelTest):
./bin/KernelTest
Running a specific test class.
./bin/KernelTest MyTestClassName
Running a specific test from a CxxTest test class (not possible via CTest).
./bin/KernelTest MyTestClassName MySingleTestName
Running a specific test from a Python
unittest
test class (not possible via CTest).PYTHONPATH=/path/to/build/bin python3 /path/to/src/Framework/PythonInterface/test/python/plugins/algorithms/MeanTest.py MeanTest.test_mean
Running Unit Tests With Visual Studio and ctest¶
Open the Mantid solution in Visual Studio. To run a subset of tests (for example UnitTests/AlgorithmsTest
);
In the Solution Explorer, right click the project for the tests (in this case
UnitTests/AlgorithmsTest
) and select Properties.In the Debugging tab of Properties change the Command Arguments box to the name of the test, for example “AddPeakTest”.
Right click the directory again and select Debug->Start new instance.
Once the build has finished, open a file browser and navigate to the mantid build directory, run the command-prompt.bat file to open a command prompt and run
ctest -C Debug -V -R AddPeakTest
For this example, there should be several lines of output ending with the time taken and the line
100% tests passed, 0 tests failed out of 1
Omitting the
-R AddPeakTest
option runs all the tests, but note that any tests which were not built according to the above instructions will fail. Adding the-V
increases the output verbosity.
Running Unit Tests With Visual Studio¶
The unit tests can be run from within Visual Studio, following steps 1-3 above, with the addition in step 2 of;
Add the name of the test to the Target Name field in the General tab of Properties. Then add a breakpoint somewhere in the test header file.
Debugging unit tests¶
See the instructions here