Как я могу использовать Boost.Test в проекте на основе CMake? - PullRequest
15 голосов
/ 29 ноября 2010

Мой проект использует CMake в качестве своей системы сборки, и я хочу, чтобы он выполнял мои тестовые примеры Boost.Test.

Как мне этого добиться? В Boost.Build я мог бы сделать это следующим образом:

import testing ;

use-project /my_lib : ../src ;

unit-test my_test
          : my_test.cpp
            /my_lib
          boost_unit_test_framework
        ;

lib boost_unit_test_framework ;

Ответы [ 3 ]

15 голосов
/ 29 ноября 2010

Сам CMake - это просто система сборки;CTest - это просто тестовый прогон, интегрированный с CMake.Ни одна из них не является структурой модульного тестирования;эту работу можно выполнить с помощью Boost.Test или googletest.

Чтобы использовать программу модульного тестирования на основе Boost.Test в проекте CMake, сначала необходимо собрать CMake и связать бинарный файл модульного теста, используя add_executable и target_link_libraries в вашем CMakeLists.txt скрипте.Затем вы можете добавить двоичный файл модульного теста в список тестов для CTest для запуска с enable_testing и add_test.

Если вы хотите стать действительно модным, вы можете просмотреть документацию CMake о том, какчтобы CMake проверил все ваши исходные файлы, чтобы автоматически находить и создавать модульные тесты, но обо всем по порядку ...

11 голосов
/ 01 декабря 2010

Я сделал несколько модулей на https://github.com/rpavlik/cmake-modules/, в том числе некоторые для интеграции буст-теста - см. Readme в этом репо для получения информации о простейшем способе их использования.

Затем выхочу сделать следующее, предполагая, что test_DimensionedQuantities.cpp является источником драйвера теста boost.test.

include(BoostTestTargets)
add_boost_test(DimensionedQuantities
 SOURCES
 test_DimensionedQuantities.cpp)

Это добавляет только один видимый CTest-тест, который завершается неудачей в случае сбоя любого из тестов наддува.Если у вас есть тесты, которые можно указать по имени для тестового драйвера (простейшие макросы попадают в эту категорию), вы можете сделать что-то вроде этого:

include(BoostTestTargets)
add_boost_test(DimensionedQuantities
 SOURCES
 test_DimensionedQuantities.cpp
 TESTS
 CheckCollision
 BodyPoseNotCorrupted
 CheckGraspTransform
 BodyFollowsMockManip1D
 BodyFollowsMockManip2D
 BodyFollowsMockManip3D)

Существует множество других опций, включая настройкузаголовок, чтобы выбрать лучший вариант: включенная версия UTF, b: статическая ссылка или c: динамическая ссылка, а также ссылки на библиотеки и т. д. Просто посмотрите информацию в файле cmake.

0 голосов
/ 29 ноября 2010

См. Проекты тестирования CMake и / или материал CTest в документации / книге CMake.

...