2015-07-06 3 views
1

Я использую CTest с CMake для запуска некоторых тестов. Я использую команду enable_testing(), которая предоставляет мне команду по умолчанию для make test. Все тесты в моем поддиректории учитываются (выполняя команду add_test), а make test отлично работает, кроме одной проблемы.Командная команда CMake и CTest по умолчанию пропускает специально названный тест

Существует определенный тест, который я назвал skip_test, что я НЕ хочу запускать, когда я делаю make test. Я хотел бы добавить пользовательскую цель, чтобы я мог запустить make skip_test, и он будет запускать этот тест.

Я могу сделать это, выполнив add_custom_target(skip_test ...) и предоставив CTest флагом -R и сообщив ему искать файлы, содержащие «skip_test» в их имени. Это также работает. Моя проблема заключается в следующем: как я могу получить команду make test игнорировать skip_test?

Если я попытаюсь прокомментировать enable_testing и добавлю свои собственные add_custom_target(test ....), я получаю «Никаких тестов не найдено !!!» теперь для make test или make skip_test. Я также попытался создать файл Custom CTest и добавить set(CTEST_CUSTOM_TESTS_IGNORE skip_test). Это работало так, что теперь make test проигнорировал «skip_test», но теперь работает make skip_test отвечает «никакие тесты не найдены !!!».

Любые предложения будут оценены!

+0

Я нашел, что в Makefile, сгенерированном CMake, задан «make test». Он запускает ctest и имеет дополнительный флаг $ (ARGS) в конце. Я нашел «решение» для моей проблемы - вручную ввести «-E. * Skip_test», и он пропускает мой тест с именем «skip_test». Как я могу сказать, что CMake добавляет это в цель «make test», которая автоматически определяется? – user35959

ответ

1

Я действительно использовал другое решение. Вот что я сделал. Для тестов, которые я хотел исключить, я использовал следующую команду при их добавлении:

«add_test (..... CONFIGURATIONS ignore_flag)», где ignore_flag - это любая фраза, которую вы хотите. Тогда, в моем CMakeLists.txt, когда я определить пользовательский целевой add_custom_target (ignore_tests ...) Даю CTest .... -С ignore_flag

Теперь сделайте тест будет пропустить эти тесты! make ignore_Tests будет запускать проигнорированные тесты + тесты без игнорирования, с которыми я в порядке.

1

Я не уверен в возможности сделать это полностью через CTest, но поскольку вы отметили этот вопрос с помощью googletest, я предполагаю, что вы используете это как свою тестовую среду. Таким образом, вы могли бы использовать способность Gtest disable tests, а также до run disabled tests.

Изменив требуемый тест (ов) на наличие ведущего DISABLED_ на их имя (имена), они не будут запускаться по умолчанию, если вы сделаете make test.

Вы можете добавить свою собственную цель, которая будет ссылаться на тестовый исполняемый файл с соответствующим GTEST флагами для запуска только отключенные тестов:

add_custom_target(skip_test 
    MyTestBinary --gtest_filter=*DISABLED_* --gtest_also_run_disabled_tests VERBATIM) 

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

+0

Это кажется разумной идеей.Я еще не тестировал его, поскольку вместо этого я пытался использовать флаги конфигурации Ctest, но ваша идея может быть проще. Благодаря! – user35959