Как настроить проект CMake для запуска всех модульных тестов? - PullRequest
0 голосов
/ 30 января 2020

У меня есть проект C ++, использующий cmake в качестве инструмента для сборки. Моя структура каталогов выглядит следующим образом:

.
├── cmake-build-debug
├── include
├── src
└── tests

Когда я нахожусь внутри cmake-build-debug, я запускаю cmake .., а затем make clean && make && make test. Я заметил, что запускается только первый юнит-тест. Как настроить мой проект так, чтобы при запуске make test все модульные тесты запускались? На root мой CMakeLists.txt выглядит следующим образом.

cmake_minimum_required(VERSION 3.10)
project(my_lib)

set(CMAKE_CXX_STANDARD 17)

add_subdirectory(src)
add_subdirectory(tests)

enable_testing()

Мой tests/CmakeLists.txt выглядит следующим образом (конфигурация взята с этого веб-сайта ).

find_package (Boost COMPONENTS system filesystem unit_test_framework REQUIRED)
add_definitions (-DBOOST_TEST_DYN_LINK)

include_directories (../include ${Boost_INCLUDE_DIRS})

file(GLOB TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)

foreach(testSrc ${TEST_SRCS})
    get_filename_component(testName ${testSrc} NAME_WE)
    add_executable(${testName} ${testSrc})

    target_link_libraries(${testName} ${Boost_LIBRARIES} my_lib)

    set_target_properties(${testName} PROPERTIES
            RUNTIME_OUTPUT_DIRECTORY  ${CMAKE_CURRENT_SOURCE_DIR}/testBin)

    add_test(NAME ${testName}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/testBin
            COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testBin/${testName}
            )
endforeach(testSrc)

Сгенерированная цель test cmake-build-debug/Makefile выглядит следующим образом.

# Special rule for the target test
test:
    @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..."
    /usr/bin/ctest --force-new-ctest-process $(ARGS)
.PHONY : test

# Special rule for the target test
test/fast: test

.PHONY : test/fast

Сгенерированный cmake-build-debug/CTestTestfile.cmake выглядит следующим образом.

subdirs("src")
subdirs("tests")

Сгенерированный cmake-build-debug/src/CTestTestfile.cmake пуст, но cmake-build-debug/tests/CTestTestfile.cmake имеет следующее содержимое. В каталоге tests есть еще test_XYZ.cpp классов, но они здесь не добавляются.

add_test(test_Dummy "/path/to/git/my_lib/tests/testBin/test_Dummy")
set_tests_properties(test_Dummy PROPERTIES  WORKING_DIRECTORY "/path/to/git/my_lib/tests/testBin")

Есть идеи, что я делаю неправильно?

1 Ответ

2 голосов
/ 30 января 2020

enable_testing() включает add_test() после него. Так что просто убедитесь, что вы звоните enable_testing() до того, как add_test() вы хотите включить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...