Spec-Zone.ru › CMake 3.21

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

Spec-Zone.ru

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