FIXTURES_REQUIRED¶
在 3.7 版本加入.
指定测试所需的固定装置列表。夹具名称区分大小写,并且不需要与测试名称有任何相似之处。
夹具是一种将设置和清理任务附加到一组测试的方法。如果测试需要给定的夹具,则将首先执行标记为该夹具的设置任务的所有测试(一次用于整个测试集,而不是每个需要夹具的测试一次)。在需要特定夹具的所有测试完成后,CTest 将确保随后执行标记为该夹具清理任务的所有测试。测试被标记为具有 FIXTURES_SETUP 属性的设置任务和具有 FIXTURES_CLEANUP 属性的清理任务。如果夹具的任何设置测试失败,则不会执行在其“FIXTURES_REQUIRED”属性中列出该夹具的所有测试。 fixture 的清理测试将始终执行,即使某些设置测试失败。
当要求 CTest 仅执行一部分测试时(例如,通过使用正则表达式或使用 --rerun-failed 命令行选项运行时),它会自动为执行集中的任何测试所需的固定装置添加任何设置或清理测试。可以使用 -FS、 -FC 和 -FA 命令行选项覆盖此行为 ctest(1) 如果需要。
由于设置和清理任务也是测试,因此它们可以像任何其他测试一样具有由 DEPENDS 测试属性指定的顺序。这可以被利用来实现设置或清理,使用多个测试对单个夹具进行模块化设置或清理逻辑。
fixture 的概念与 RESOURCE_LOCK 指定的资源的概念不同,但它们可以一起使用。 fixture 定义一组共享设置和清理要求的测试,而资源锁具有确保一组特定测试不会并行运行的效果。有些情况可能两者都需要,例如设置数据库、序列化对该数据库的测试访问并在最后再次删除数据库。对于这种情况,测试将填充 FIXTURES_REQUIRED 和 RESOURCE_LOCK 以结合这两种行为。用于 RESOURCE_LOCK 的名称与 fixture 的名称没有关系,因此请注意,资源锁并不意味着 fixture,反之亦然。
考虑以下示例,它表示与上述类似的数据库测试场景:
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关系,因此它可以在任何一个夹具的其他清理测试之前、之后或同时运行。setup 和 cleanup 测试从不在它们自己的
FIXTURES_REQUIRED属性中列出它们所针对的 fixture,因为这会导致对它们自己的依赖并被视为错误。