Как я могу использовать Boost.Test в проекте на основе CMake?

Мой проект использует 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 ;

Ответы

Ответ 1

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

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

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

Ответ 2

Я сделал несколько модулей в 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 для информации.

Ответ 3

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