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