Spec-Zone.ru › CMake 3.23

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

Spec-Zone.ru

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