Выполнение вложенных тестов с помощью CTest - PullRequest
3 голосов
/ 03 января 2012

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

Макет таков:

/CMakeLists.txt
/build/
/src/command-line-application/
/src/command-line-application/CMakeLists.txt
/src/command-line-application/build/
/src/command-line-application/src/
/src/command-line-application/tests/
/src/command-line-application/include/
/src/vlc-plugin/
/src/vlc-plugin/src/
/src/libmyproject/
/src/libmyproject/CMakeLists.txt
/src/libmyproject/build/
/src/libmyproject/src/
/src/libmyproject/tests/
/src/libmyproject/include/
/src/libmyotherproject/
/src/libmyotherproject/CMakeLists.txt
/src/libmyotherproject/build/
/src/libmyotherproject/src/
/src/libmyotherproject/tests/
/src/libmyotherproject/include/

Слово об архитектуре, libmyproject - настоящая сущность моего приложения, оно построено таким образом, потому что CLI - это ужасный способ доставки кода конечным пользователям, в качестве библиотеки, он также используется из C # и Objective-C приложений. (и все это работает как положено)

libmyotherproject - это код поддержки конкретной платформы, напрямую не связанный с libmyproject, он имеет несколько модульных тестов.

vlc-plugin здесь не важен, за исключением того, что показывает, что не все в /src/*/ имеют модульные тесты.

Мой рабочий процесс обычно заключается в взломе приложения CLI до тех пор, пока не появится что-то полезное, а затем рефакторинг его в библиотеку и обеспечение его переносимости.

Когда я работаю в /src/*/build/, обычно под управлением cmake ../ && make && ctest --output-on-failure, все работает.

Когда я работаю в /build и запускаю cmake, отдельные компоненты создаются правильно (используя add_subdirectories()) из CMake, но CTest не находит рекурсивно тесты.

Документация для CTest немного бесполезна в том, что вы должны делать:

USAGE
         ctest [options]

DESCRIPTION
       The  "ctest"  executable is the CMake test driver program.  CMake-generated build trees created for
       projects that use the ENABLE_TESTING and ADD_TEST commands have testing support.  This program will
       run the tests and report results.

Я бы ожидал, что после ADD_TEST() вызовов в /src/libmyotherproject/tests/CMakeLists.txt они будут выполняться? (Они по крайней мере компилируются, когда я запускаю cmake из /build/)

Я надеюсь, что смог предоставить достаточно информации, спасибо.

1 Ответ

4 голосов
/ 08 ноября 2012

Помещенный

include(CTest)

в вашем файле CMakeLists.txt верхнего уровня перед выполнением любых вызовов add_subdirectory.

Это вызовет enable_testing для вас, а также настроит, если вы когда-нибудь захотите запустить сценарий панели инструментов ctest в проекте для отправки результатов на сервер CDash.

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