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