Unit Tests Manual
maxon::UnitTestInterface provides an unified interface for any kind of unit test. Such an unit test should verify the correct functionality of every component of a program. Unit tests implemented this way are automatically executed when Cinema 4D starts and unit tests are enabled.
Custom unit test are created by implementing a custom class based on maxon::UnitTestComponent . This custom class must implement maxon::UnitTestInterface::Run() which contains the unit test code.
The result of a test can be printed to the console using a standard format:
A (long running) unit test may be cancelled from the outside:
// if GetNumber() fails the rest of the unit tests cannot succeed if (baseRes. GetError ()) return baseRes; }
// test SimpleMaths::AddNumber() MAXON_SCOPE { SimpleMaths addTest(99); addTest.AddNumber(1); const maxon::Result<void> addTestRes = addTest.GetNumber() == 100 ? maxon::OK : maxon::UnitTestError( MAXON_SOURCE_LOCATION , "AddNumber() failed" _s); self .AddResult( "AddNumber() test" _s, addTestRes); }
// test SimpleMaths::SubstractNumber() MAXON_SCOPE { SimpleMaths subTest(100); subTest.SubstractNumber(1); const maxon::Result<void> subTestRes = subTest.GetNumber() == 99 ? maxon::OK : maxon::UnitTestError( MAXON_SOURCE_LOCATION , "SubstractNumber() failed" _s); self .AddResult( "SubstractNumber() test" _s, subTestRes); } return maxon::OK ; } };
The result of this unit test will be printed to the console:
========================================== @Running unit test 1 / 1: net.example.unittest.simplemaths ========================================== Unittest "net.example.unittest.simplemaths" OK : GetNumber() test Unittest "net.example.unittest.simplemaths" OK : AddNumber() test Unittest "net.example.unittest.simplemaths" OK : SubstractNumber() test Duration: 0.5 ms ========================================== @ScriptRef EndDifferent kinds of unit tests can be registered at these registries:
maxon::UnitTestClasses:
Basic unit tests. This kind of test should pass within seconds. Started with the command line argument "g_runUnitTests".
maxon::SpeedTestClasses:
Speed tests. This kind of test should pass within seconds. Started with the command line argument "g_runSpeedTests".
maxon::LongRunTestClasses:
Long run tests. Started with the command line argument "g_runLongRunTests".
To run all unit tests set the command line argument to "*" like
g_runUnitTests=*
. To run a specific test one can define a filter like
g_runUnitTests=*simplemaths*
.