Spec-Zone.ru › CMake 3.19

GoogleTest

Новое в версии 3.9.

Этот модуль определяет функции для работы со структурой 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

Указывает 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]
                     [XML_OUTPUT_DIR dir]
                     [DISCOVERY_MODE <POST_BUILD|PRE_TEST>]
)

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

Указывает префикс, который будет добавлен к имени каждого обнаруженного тестового случая. Это может быть полезно, когда один и тот же исполняемый файл теста используется в нескольких вызовах 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. Также см. опцию TIMEOUT в execute_process().

Примечание

В версиях CMake 3.10.1 и 3.10.2 эта опция называлась TIMEOUT. Это вступало в конфликт со свойством теста TIMEOUT, которое является одним из распространённых свойств, которые устанавливаются с ключевым словом PROPERTIES, обычно приводя к допустимому, но непреднамеренному поведению. Ключевое слово было изменено на DISCOVERY_TIMEOUT в CMake 3.10.3 для решения этой проблемы. Неясно определённое поведение ключевого слова TIMEOUT в версиях 3.10.1 и 3.10.2 не сохранилось.

XML_OUTPUT_DIR dir

Если указано, параметр передаётся вместе с --gtest_output=xml: исполняемому файлу теста. Фактическое имя файла такое же, как у целевого объекта теста, включая префикс и суффикс. Это следует использовать вместо EXTRA_ARGS --gtest_output=xml для предотвращения гонок при записи XML-вывода результатов при использовании параллельного выполнения тестов.

DISCOVERY_MODE

Предоставляет больший контроль над тем, когда gtest_discover_tests() выполняет обнаружение тестов. По умолчанию POST_BUILD настраивает команду после сборки для выполнения обнаружения тестов во время сборки. В некоторых сценариях, таких как кросс-компиляция, такое поведение POST_BUILD нежелательно. Напротив, PRE_TEST откладывает обнаружение тестов до непосредственного момента перед выполнением тестов. Таким образом, обнаружение тестов происходит в целевой среде, где у теста больше шансов найти соответствующие зависимости во время выполнения.

DISCOVERY_MODE по умолчанию принимает значение переменной CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE , если она не передана при вызове gtest_discover_tests() . Это обеспечивает механизм глобального выбора предпочтительного поведения обнаружения тестов без необходимости изменения каждого места вызова.

© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.19/module/GoogleTest.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API