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