FIXTURES_REQUIRED¶
在 3.7 版本中添加。
指定测试所需的夹具列表。夹具名称区分大小写,且无需与测试名称有任何相似之处。
夹具是一种将设置和清理任务附加到一组测试的方法。如果测试需要给定夹具,那么标记为该夹具设置任务的所有测试将首先执行(仅对整组测试执行一次,而不是针对需要该夹具的每个测试执行一次)。在所有需要特定夹具的测试完成后,CTest 将确保所有标记为该夹具的清理任务随后执行。测试使用 FIXTURES_SETUP
属性标记为设置任务,并使用 FIXTURES_CLEANUP
属性标记为清理任务。如果任何夹具的设置测试失败,那么在 FIXTURES_REQUIRED
属性中列出该夹具的所有测试将不会执行。即使某些设置测试失败,也将始终执行该夹具的清理测试。
当要求 CTest 仅执行测试子集(例如使用正则表达式,或使用 --rerun-failed
命令行选项运行)时,它将自动添加执行集中任何测试所需夹具的任何设置或清理测试。如果需要,可以使用 ctest(1)
的 -FS
、-FC
和 -FA
命令行选项来覆盖此行为。
由于设置和清理任务也是测试,因此它们可以通过 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
关系,因此它可以在任何固定装置的其他清理测试之前、之后或与之同时运行。准备和清理测试永远不会在它们自身