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.11/prop_test/FIXTURES_REQUIRED.html