Spec-Zone.ru › CMake

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API