FIXTURES_REQUIRED
Добавлено в версии 3.7.
Задает список фикстур, необходимых тесту. Имена фикстур чувствительны к регистру и не обязаны быть похожими на имена тестов.
Фикстуры позволяют привязать задачи настройки и очистки к набору тестов. Если тесту требуется определенная фикстура, сначала будут выполнены все тесты, помеченные как задачи настройки для этой фикстуры (один раз для всего набора тестов, а не один раз для каждого теста, которому нужна фикстура). После завершения всех тестов, которым требуется определенная фикстура, 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). ДляtestsDoneне задана зависимостьDEPENDS, поэтому этот тест может выполняться до, после или одновременно с другими тестами очистки любой из фикстур. - Тесты настройки и очистки не указывают фикстуры, для которых они предназначены, в собственном свойстве
FIXTURES_REQUIRED, поскольку это создало бы зависимость от самих себя и считалось бы ошибкой.
© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/prop_test/FIXTURES_REQUIRED.html