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–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.13/prop_test/FIXTURES_REQUIRED.html