GoogleTest
Этот модуль определяет функции для работы с инфраструктурой Google Test. Предоставляются два механизма добавления тестов. gtest_add_tests() существует уже некоторое время, первоначально через find_package(GTest). gtest_discover_tests() был представлен в CMake 3.10.
Команда (более старая) gtest_add_tests() сканирует исходные файлы для определения тестов. Это обычно эффективно, с некоторыми оговорками, включая кросс-компиляционные среды, и упрощает установку дополнительных свойств тестов. Однако обработка параметризованных тестов менее полная, и для обнаружения изменений в списке тестов требуется повторное выполнение CMake.
Команда (более новая) gtest_discover_tests() обнаруживает тесты, запрашивая у скомпилированного исполняемого файла теста перечислить его тесты. Это более надёжно и обеспечивает лучшую обработку параметризованных тестов, и не требует повторного запуска CMake при изменении тестов. Однако это может не работать в кросс-компиляционной среде, а установка свойств тестов менее удобна.
Более подробные сведения можно найти в документации соответствующих функций.
Обе команды предназначены для замены использования add_test() для регистрации тестов и создадут отдельный CTest тест для каждого тестового случая Google Test. Обратите внимание, что это в некоторых случаях менее эффективно, так как общая логика настройки и завершения работы не может быть общей для нескольких тестовых случаев, выполняемых в одном экземпляре. Однако это предоставляет более подробную информацию о результатах прохождения/непрохождения CTest, что обычно считается более полезным. По умолчанию имя CTest теста совпадает с именем Google Test (т.е. suite.testcase); см. также TEST_PREFIX и TEST_SUFFIX.
-
gtest_add_tests -
Автоматически добавляет тесты с помощью CTest, сканируя исходный код на наличие макросов Google Test:
gtest_add_tests(TARGET target [SOURCES src1...] [EXTRA_ARGS arg1...] [WORKING_DIRECTORY dir] [TEST_PREFIX prefix] [TEST_SUFFIX suffix] [SKIP_DEPENDENCY] [TEST_LIST outVar] )gtest_add_testsпытается идентифицировать тесты, сканируя исходные файлы. Хотя это, как правило, эффективно, оно использует только базовую регулярную выражение, что может быть обойдено нестандартными объявлениями тестов, и не может полностью «разделить» параметризованные тесты. Кроме того, для обнаружения любых добавленных, удалённых или переименованных тестов требуется повторный запуск CMake (по умолчанию это означает, что CMake перевыполняется при изменении любого файла исходного кода теста, но см.SKIP_DEPENDENCY). Однако у него есть преимущество в объявлении тестов на этапе CMake, что несколько упрощает настройку дополнительных свойств тестов и всегда работает в среде кросс-компиляции.Доступные параметры:
-
TARGET target - Указывает исполняемый файл Google Test, который должен быть известной целью CMake. CMake заменит расположение скомпилированного исполняемого файла при запуске теста.
-
SOURCES src1... - Если указано, будут отсканированы только перечисленные файлы в поисках тестовых случаев. Если этот параметр не указан, список источников будет получен из свойства
SOURCESуказаннойtarget. -
EXTRA_ARGS arg1... - Дополнительные аргументы, которые нужно передать каждой тестовой ситуации в командной строке.
-
WORKING_DIRECTORY dir - Указывает каталог для запуска обнаруженных тестовых случаев. Если этот параметр не указан, используется текущий каталог бинарных файлов.
-
TEST_PREFIX prefix - Указывает префикс, который будет добавлен к имени каждого обнаруженного тестового случая. Это может быть полезно, когда одни и те же исходные файлы используются в нескольких вызовах
gtest_add_test(), но с разнымиEXTRA_ARGS. -
TEST_SUFFIX suffix - Аналогично
TEST_PREFIX, за исключением того, чтоsuffixдобавляется к имени каждого обнаруженного тестового случая. Можно указать какTEST_PREFIX, так иTEST_SUFFIX. -
SKIP_DEPENDENCY - Обычно функция создаёт зависимость, которая заставит CMake перевыполниться, если будут изменены какие-либо из отсканированных источников. Это для обновления списка обнаруженных тестов. Если этого поведения не нужно (например, при написании самих тестовых случаев), этот параметр можно использовать, чтобы предотвратить добавление зависимости.
-
TEST_LIST outVar - Переменная, указанная в
outVar, будет заполняться в области вызова списком обнаруженных тестовых случаев. Это позволяет вызывающему коду выполнять действия, такие как манипулирование свойствами обнаруженных тестов.
include(GoogleTest) add_executable(FooTest FooUnitTest.cxx) gtest_add_tests(TARGET FooTest TEST_SUFFIX .noArgs TEST_LIST noArgsTests ) gtest_add_tests(TARGET FooTest EXTRA_ARGS --someArg someValue TEST_SUFFIX .withArgs TEST_LIST withArgsTests ) set_tests_properties(${noArgsTests} PROPERTIES TIMEOUT 10) set_tests_properties(${withArgsTests} PROPERTIES TIMEOUT 20)Для обратной совместимости также поддерживается следующая форма:
gtest_add_tests(exe args files...)
-
exe - Путь к исполняемому файлу теста или имя целевого объекта CMake.
-
args - Список дополнительных аргументов, которые нужно передать исполняемому файлу. Весь список должен передаваться как один аргумент. Заключите его в кавычки или передайте
""для отсутствия аргументов. -
files... - Список исходных файлов для поиска тестов и тестовых фикстур. В качестве альтернативы используйте
AUTO, чтобы указать, чтоexe— это имя целевого объекта CMake, исходные коды которого следует отсканировать.
include(GoogleTest) set(FooTestArgs --foo 1 --bar 2) add_executable(FooTest FooUnitTest.cxx) gtest_add_tests(FooTest "${FooTestArgs}" AUTO) -
-
gtest_discover_tests -
Автоматически добавляет тесты с помощью CTest, запрашивая у исполняемого файла теста, скомпилированного для доступных тестов:
gtest_discover_tests(target [EXTRA_ARGS arg1...] [WORKING_DIRECTORY dir] [TEST_PREFIX prefix] [TEST_SUFFIX suffix] [NO_PRETTY_TYPES] [NO_PRETTY_VALUES] [PROPERTIES name1 value1...] [TEST_LIST var] [DISCOVERY_TIMEOUT seconds] )gtest_discover_testsнастраивает команду после сборки для исполняемого файла теста, которая генерирует список тестов, анализируя вывод от запуска теста с аргументом--gtest_list_tests. По сравнению с подходом к анализу исходного кодаgtest_add_tests(), это гарантирует, что будет получен полный список тестов, включая инстанциации параметризованных тестов. Поскольку обнаружение тестов происходит во время сборки, повторный запуск CMake при изменении списка тестов не требуется. Однако, для работы в среде кросс-компиляции необходимо правильно установитьCROSSCOMPILING_EMULATOR.Кроме того, настройка свойств тестов несколько менее удобна, так как тесты недоступны во время CMake. Дополнительные свойства тестов могут быть заданы для набора тестов в целом с помощью опции
PROPERTIES. Если требуется более точный контроль над тестами, пользовательский контент может быть предоставлен через внешний скрипт CTest с помощью свойства каталогаTEST_INCLUDE_FILES. Набор обнаруженных тестов делается доступным для такого скрипта через переменную<target>_TESTS.Доступные опции:
-
target - Указывает исполняемый файл Google Test, который должен быть известным целевым объектом CMake. CMake заменит расположение скомпилированного исполняемого файла при запуске теста.
-
EXTRA_ARGS arg1... - Любые дополнительные аргументы для передачи в командной строке каждому тестовому случаю.
-
WORKING_DIRECTORY dir - Указывает каталог, в котором необходимо запустить обнаруженные тестовые случаи. Если эта опция не указана, используется текущий каталог бинарных файлов.
-
TEST_PREFIX prefix - Указывает
prefix, которое будет добавлено перед именем каждого обнаруженного тестового случая. Это может быть полезно, когда один и тот же исполняемый файл теста используется в нескольких вызовахgtest_discover_tests(), но с разнымиEXTRA_ARGS. -
TEST_SUFFIX suffix - Аналогично
TEST_PREFIX, ноsuffixдобавляется к имени каждого обнаруженного тестового случая. Обе опцииTEST_PREFIXиTEST_SUFFIXмогут быть указаны. -
NO_PRETTY_TYPES - По умолчанию индекс типа параметризованных тестов заменяется фактическим именем типа в имени теста CTest. Если это поведение нежелательно (например, потому что имена типов громоздкие), эта опция позволит его подавить.
-
NO_PRETTY_VALUES - По умолчанию индекс значения параметризованных тестов заменяется фактическим значением в имени теста CTest. Если это поведение нежелательно (например, потому что строковые значения значений громоздкие), эта опция позволит его подавить.
-
PROPERTIES name1 value1... - Указывает дополнительные свойства, которые должны быть установлены для всех тестов, обнаруженных этим вызовом
gtest_discover_tests. -
TEST_LIST var - Сделать список тестов доступным в переменной
var, а не в стандартной<target>_TESTS. Это может быть полезно, когда один и тот же исполняемый файл теста используется в нескольких вызовахgtest_discover_tests(). Обратите внимание, что эта переменная доступна только в CTest. -
DISCOVERY_TIMEOUT num -
Указывает, сколько времени (в секундах) CMake будет ожидать, пока тест перечислит доступные тесты. Если выполнение теста займет больше этого времени, обнаружение (и ваша сборка) завершатся ошибкой. Большинство исполняемых файлов тестов перечисляют свои тесты очень быстро, но в некоторых исключительных случаях тест может потребовать более длительного таймаута. По умолчанию значение равно 5. Смотрите также опцию
TIMEOUTexecute_process().Примечание
В версиях CMake 3.10.1 и 3.10.2 эта опция называлась
TIMEOUT. Это вступало в конфликт со свойством тестаTIMEOUT, которое является одним из общих свойств, которые устанавливались с помощью ключевого словаPROPERTIES, что часто приводило к законному, но нежелательному поведению. В CMake 3.10.3 ключевое слово было изменено наDISCOVERY_TIMEOUT, чтобы решить эту проблему. Непреднамеренное поведение ключевого словаTIMEOUTв версиях 3.10.1 и 3.10.2 не сохранено.
-
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.12/module/GoogleTest.html