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–2024 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