Как я могу использовать 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.