FIXTURES_REQUIRED
Указывает список фикстур, необходимых для теста. Имена фикстур регистрозависимы, и они не обязаны иметь никакого сходства с именами тестов.
Фикстуры — это способ прикрепить задачи настройки и очистки к набору тестов. Если тест требует определенной фикстуры, то все тесты, помеченные как задачи настройки для этой фикстуры, будут выполняться первыми (один раз для всего набора тестов, а не один раз для каждого теста, требующего фикстуры). После завершения всех тестов, требующих определенной фикстуры, CTest гарантирует, что все тесты, помеченные как задачи очистки для этой фикстуры, будут затем выполнены. Тесты помечаются как задачи настройки с помощью свойства FIXTURES_SETUP, а как задачи очистки — с помощью свойства FIXTURES_CLEANUP. Если любой из тестовых задач настройки фикстуры завершится неудачно, все тесты, перечисляющие эту фикстуру в своём свойстве FIXTURES_REQUIRED, не будут выполнены. Тесты очистки для фикстуры всегда будут выполнены, даже если некоторые тесты настройки завершатся неудачно.
Когда CTest получает запрос на выполнение только подмножества тестов (например, с помощью регулярных выражений или при запуске с параметром командной строки --rerun-failed), он автоматически добавит все тесты настройки или очистки для фикстур, необходимых любым из тестов, которые находятся в наборе выполнения. Это поведение может быть переопределено параметрами командной строки -FS, -FC и -FA для ctest(1), если это необходимо.
Поскольку задачи настройки и очистки также являются тестами, они могут иметь порядок, указанный свойством теста DEPENDS, как и любые другие тесты. Это можно использовать для реализации настройки или очистки с помощью нескольких тестов для одной фикстуры, чтобы модулизировать логику настройки или очистки.
Понятие фикстуры отличается от понятия ресурса, заданного RESOURCE_LOCK, но их можно использовать вместе. Фикстура определяет набор тестов, которые имеют общие требования к настройке и очистке, а блокировка ресурсов обеспечивает, что определенный набор тестов не будет выполняться параллельно. В некоторых ситуациях могут потребоваться оба типа, например, при настройке базы данных, сериализации доступа к этой базе данных и удалении базы данных в конце. В таких случаях тесты будут заполнять как FIXTURES_REQUIRED, так и RESOURCE_LOCK, чтобы объединить оба поведения. Имена, используемые для RESOURCE_LOCK, не связаны с именами фикстур, поэтому обратите внимание, что блокировка ресурсов не подразумевает фикстуру и наоборот.
Рассмотрим следующий пример, представляющий сценарий тестирования базы данных, аналогичный упомянутому выше:
add_test(NAME testsDone COMMAND emailResults)
add_test(NAME fooOnly COMMAND testFoo)
add_test(NAME dbOnly COMMAND testDb)
add_test(NAME dbWithFoo COMMAND testDbWithFoo)
add_test(NAME createDB COMMAND initDB)
add_test(NAME setupUsers COMMAND userCreation)
add_test(NAME cleanupDB COMMAND deleteDB)
add_test(NAME cleanupFoo COMMAND removeFoos)
set_tests_properties(setupUsers PROPERTIES DEPENDS createDB)
set_tests_properties(createDB PROPERTIES FIXTURES_SETUP DB)
set_tests_properties(setupUsers PROPERTIES FIXTURES_SETUP DB)
set_tests_properties(cleanupDB PROPERTIES FIXTURES_CLEANUP DB)
set_tests_properties(cleanupFoo PROPERTIES FIXTURES_CLEANUP Foo)
set_tests_properties(testsDone PROPERTIES FIXTURES_CLEANUP "DB;Foo")
set_tests_properties(fooOnly PROPERTIES FIXTURES_REQUIRED Foo)
set_tests_properties(dbOnly PROPERTIES FIXTURES_REQUIRED DB)
set_tests_properties(dbWithFoo PROPERTIES FIXTURES_REQUIRED "DB;Foo")
set_tests_properties(dbOnly dbWithFoo createDB setupUsers cleanupDB
PROPERTIES RESOURCE_LOCK DbAccess)
Ключевые моменты из этого примера:
- Определены две фикстуры:
DBиFoo. Тесты могут требовать одной фикстуры, какfooOnlyиdbOnly, или они могут зависеть от нескольких фикстур, какdbWithFoo. - Установлено отношение
DEPENDS, чтобы гарантировать, чтоsetupUsersпроисходит послеcreateDB, оба из которых являются тестами настройки для фикстурыDBи поэтому будут выполнены перед тестамиdbOnlyиdbWithFooавтоматически. - Не было необходимости в явных отношениях
DEPENDS, чтобы сделать тесты настройки выполняющимися перед или тесты очистки выполняющимися после обычных тестов. - У фикстуры
Fooнет тестов настройки, только один тест очистки. -
testsDoneявляется тестом очистки как для фикстурыDB, так и для фикстурыFoo. Следовательно, он будет выполняться только после завершения обычных тестов для обеих фикстур (т. е. послеfooOnly,dbOnlyиdbWithFoo). Не было указано отношениеDEPENDSдляtestsDone, поэтому он может выполняться до, после или одновременно с другими тестами очистки для любой из фикстур. - Тесты настройки и очистки никогда не перечисляют фикстуры, для которых они предназначены, в собственном свойстве
FIXTURES_REQUIRED, так как это приведет к зависимости от самих себя и будет рассматриваться как ошибка.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.16/prop_test/FIXTURES_REQUIRED.html