Думаю що більшість C ++ розробників так чи інакше стикалися з CMake, в той же час що таке CTest і як з його допомогою можна автоматизувати модельне тестування знають далеко не всі.
Для того, що б показати як можна використовувати CMake і CTest разом, я як приклад створив маленьку бібліотечку, що складається з пари рядків коду, яке вміє складати і ділити Крім додатків CMake і CTest, знадобиться якась UnitTest бібліотека (в даному прикладі я взяв Boost.Test, хоча, можна взяти і GoogleTest). Тут варто звернути увагу на те, що CTest не є фреймворком для написання тестів. CTest - це додаток для запуску тестів і, якщо це необхідно, відправлення результатів в будь-яка з підтримуваних сховищ.
Структура директорій з тестовому додатку буде наступна:
./ test
./test/main.cpp
./test/CMakeLists.txt
./ include
./include/calc.h
./ src
./src/CMakeLists.txt
./src/calc.cpp
./CMakeLists.txt
Таки чином, створюємо один кореневий CMakeLists і по одному CMakeLists файлу для опису збірки самої бібліотеки і тестів.
cmake_minimum_required (VERSION 2.6)
project (AutoUnitTests)
$ / Bin
CACHE PATH
"Single Directory for all"
) SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY
$ / Bin
CACHE PATH
"Single Directory for all"
) SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY
$ / Lib
CACHE PATH
"Single Directory for all"
)
find_package (Boost REQUIRED)
add_subdirectory (src build / src)
add_subdirectory (test build / test)
Перші три SET команди не обов'язкові, просто я не люблю коли в процесі складання купа проміжних файлів поміщається в кореневу директорію. А ось наявність команди enable_testing в кореневому CMakeLists файлі на оборот обов'язково, якщо її перенести в CMakeLists з директорії test, то працювати це не буде.
Наступним кроком буде створення CMakeLists файлу в директорії src, чесно сказати, він із себе не найменшого інтересу не представляє:
project (Calc)
set (Calc_source calc.cpp)
add_library (calc STATIC $)
І останній файл, в директорії test:
find_package (Boost COMPONENTS unit_test_framework REQUIRED)
set (test1_source main.cpp)
add_executable (test1 $)
target_link_libraries (test1 $ calc)
add_test (NAME Test1 COMMAND test1)
Єдиним відрізняємо від звичайного CMakeLists файлу буде команда add_test. в яку передається ім'я тесту і те, яку команду необхідно виконати для його запуску. Тобто дана команда цілком може виглядати і так:
add_test (testTkInter "/ usr / bin / python" "-c" "import Tkinter")
Тепер, тести на виконання можна запускати за допомогою команди make test і результат буде виглядати наступним чином:
Running tests.
Test project / home / astavonin / Projects / AutoUnitTest
Start 1: Test1
1/1 Test # 1: Test1. Passed 0.03 sec
100% tests passed, 0 tests failed out of 1
Total Test time (real) = 0.56 sec
Якщо ж додати ще один тест, який повинен провалитися, то результати будуть дещо інші:
Running tests.
Test project / home / astavonin / Projects / AutoUnitTest
Start 1: Test1
1/2 Test # 1: Test1. Passed 0.00 sec
Start 2: Test2
2/2 Test # 2: Test2. *** Failed 0.00 sec
50% tests passed, 1 tests failed out of 2
Total Test time (real) = 0.46 sec
The following tests FAILED:
2 - Test2 (Failed)
Errors while running CTest
Консольний висновок тестових додатків буде збережено в директорії ./Testing/Temporary.
Приклад повністю можна скачати тут.