Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.
Unit Testing: Difference between revisions
(Move from Category:Howto to Category:HowTo) |
m (Fix formatting) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 10: | Line 10: | ||
'''Output to a txt file''' | '''Output to a txt file''' | ||
< | <pre>QStringList testCmd; | ||
QDir testLogDir; | QDir testLogDir; | ||
testLogDir.mkdir("UnitTest_Results"); | testLogDir.mkdir("UnitTest_Results"); | ||
testCmd<<" "<<"-o" <<"UnitTest_Results/test_log.txt"; | testCmd<<" "<<"-o" <<"UnitTest_Results/test_log.txt"; | ||
QTest::qExec(myTestClass,testCmd);</ | QTest::qExec(myTestClass,testCmd);</pre> | ||
'''Output in xml format:''' | '''Output in xml format:''' | ||
< | <pre>QStringList testCmd; | ||
QDir testLogDir; | QDir testLogDir; | ||
testLogDir.mkdir("UnitTest_Results"); | testLogDir.mkdir("UnitTest_Results"); | ||
testCmd<<" "<<"-xml" <<"-o" <<"UnitTest_Results/test_log.xml"; | testCmd<<" "<<"-xml" <<"-o" <<"UnitTest_Results/test_log.xml"; | ||
QTest::qExec(myTestClass,testCmd);</ | QTest::qExec(myTestClass,testCmd);</pre> | ||
The above code will run the test and the output will be generated in xml format. The xml file can be parsed and the details can be displayed in an appropriate way as per the requirements. | The above code will run the test and the output will be generated in xml format. The xml file can be parsed and the details can be displayed in an appropriate way as per the requirements. | ||
== Running and compiling QTests with CTest == | == Qt 4: Running and compiling QTests with CTest == | ||
CTest, by design, is only a facility for testing. For that it scales to very different unit tests frameworks, and works out of box with QTest. | CTest, by design, is only a facility for testing. For that it scales to very different unit tests frameworks, and works out of box with QTest. | ||
Line 32: | Line 32: | ||
The snippet below goes to CMakeLists.txt, and specifies files that are used for the test. | The snippet below goes to CMakeLists.txt, and specifies files that are used for the test. | ||
< | <pre> | ||
enable_testing(true) | enable_testing(true) | ||
include_directories( test ) | include_directories( test ) | ||
Line 41: | Line 41: | ||
) | ) | ||
add_test(dummytest test/DummyTest.cpp) | add_test(dummytest test/DummyTest.cpp) | ||
</ | </pre> | ||
If you do not want to have tests built all the time, remove | If you do not want to have tests built all the time, remove | ||
Line 51: | Line 51: | ||
The macro below uses variable ${test_additional} to give additional source files for test to compile, the files that are needed for test. It adds the test with | The macro below uses variable ${test_additional} to give additional source files for test to compile, the files that are needed for test. It adds the test with | ||
<code>add_test()</code> | <code>add_test()</code> | ||
to ctest test | to ctest test "database". | ||
< | <pre> | ||
MACRO (add_test testname testsrc) | MACRO (add_test testname testsrc) | ||
SET (test_${testname}_SRCS ${testsrc}) | SET (test_${testname}_SRCS ${testsrc}) | ||
Line 65: | Line 65: | ||
ADD_TEST(test_${testname} test_${testname}) | ADD_TEST(test_${testname} test_${testname}) | ||
ENDMACRO (add_test) | ENDMACRO (add_test) | ||
</ | </pre> | ||
Tests can be compiled with | Tests can be compiled with | ||
Line 71: | Line 71: | ||
and run either directly by name of the test (test_${testname} as specified in the macro) or every test as batch with | and run either directly by name of the test (test_${testname} as specified in the macro) or every test as batch with | ||
<code>make test</code> | <code>make test</code> | ||
== Qt 5: Building Qt Tests == | |||
See [https://doc.qt.io/qt-5/qtest-overview.html#building-a-test Building a Test] in the [https://doc.qt.io/qt-5/qttest-index.html Qt Test documentation]. | |||
[[Category:HowTo]] | [[Category:HowTo]] |
Latest revision as of 18:33, 21 December 2020
Unit testing with QTest
For a basic overview how to write unit tests with qtestlib, you should refer to the official manual.
Test Output
Output to a txt file
QStringList testCmd; QDir testLogDir; testLogDir.mkdir("UnitTest_Results"); testCmd<<" "<<"-o" <<"UnitTest_Results/test_log.txt"; QTest::qExec(myTestClass,testCmd);
Output in xml format:
QStringList testCmd; QDir testLogDir; testLogDir.mkdir("UnitTest_Results"); testCmd<<" "<<"-xml" <<"-o" <<"UnitTest_Results/test_log.xml"; QTest::qExec(myTestClass,testCmd);
The above code will run the test and the output will be generated in xml format. The xml file can be parsed and the details can be displayed in an appropriate way as per the requirements.
Qt 4: Running and compiling QTests with CTest
CTest, by design, is only a facility for testing. For that it scales to very different unit tests frameworks, and works out of box with QTest.
The snippet below goes to CMakeLists.txt, and specifies files that are used for the test.
enable_testing(true) include_directories( test ) set(test_additional some_dependency.cpp some_other_dependency.cpp ) add_test(dummytest test/DummyTest.cpp)
If you do not want to have tests built all the time, remove
enable_testing()
and run cmake with
cmake .. -DENABLE_TESTING=true
in order to build tests.
The macro below uses variable ${test_additional} to give additional source files for test to compile, the files that are needed for test. It adds the test with
add_test()
to ctest test "database".
MACRO (add_test testname testsrc) SET (test_${testname}_SRCS ${testsrc}) qt4_automoc(${test_${testname}_SRCS}) add_executable(test_${testname} ${test_${testname}_SRCS} ${test_additional}) target_link_libraries(test_${testname} ${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY} ${QT_QTGUI_LIBRARY} ${GSOAP_LIBRARIES} ${QT_QTLOCATION_LIBRARY}) ADD_TEST(test_${testname} test_${testname}) ENDMACRO (add_test)
Tests can be compiled with
make
and run either directly by name of the test (test_${testname} as specified in the macro) or every test as batch with
make test
Qt 5: Building Qt Tests
See Building a Test in the Qt Test documentation.