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
屬性中列出它們所針對的夾具,因為這會導致它們依賴自身,並被視為錯誤。