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