本頁面提供有關如何建立使用 Rust 測試工具的rust_test
模組的基本資訊。
編寫基本的 Rust 測試
有關裝置上和主機上 Rust 測試的即時範例,請查看keystore2 Android.bp ,或在external/rust/crates
目錄中的許多套件中找到一個。
rust_test
模組使用 rustc 的--test
標誌構建,該標誌使用#[test]
屬性標記的程式碼建立測試。有關更多信息,請參閱Rust 參考測試屬性文件。
定義一個測試模組如下:
rust_test {
name: "libfoo_inline_tests",
// Specify the entry point of your library or binary to run all tests
// specified in-line with the test attribute.
srcs: ["src/lib.rs"],
// Tradefed test suite to include this test in.
test_suites: ["general-tests"],
// Autogenerate the test config
auto_gen_config: true,
rustlibs: [
"libfoo",
],
}
TEST_MAPPING
檔案包含測試清單。儘管這不是必需的,但如果您確實建立了 TEST_MAPPING 文件,那麼您包含在其中的測試將在提交前測試中運行,並且可以使用atest
呼叫。
您可以參考TEST_MAPPING 文件以獲取更多信息,但對於libfoo_inline_tests
範例,請將其新增至預先提交以使測試能夠在 TreeHugger 上執行:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
請注意,除非unit_tests:
設定為false
,否則rust_test_host
模組預設在預先提交中運行,因此您無需在TEST_MAPPING
檔案中聲明這些模組。
有關auto_gen_config
和test_suites
屬性如何運作的更多信息,請參閱測試開發工作流程文件的設定部分。
值得注意的 Rust 測試特性
rust_test
模組繼承了rust_binary
模組的屬性,如二進位模組頁面所述。
下表中定義的屬性是適用於所有模組的重要公共屬性的補充。這些要么對 Rust 測試模組特別重要,要么表現出特定於rust_test
模組類型的獨特行為。
- test_harness :進階用法,預設為true。
如果您的rust_test
實作了自己的測試工具,並且不需要使用內建的 Rust 測試工具,請將其設為 false(換句話說,將其設為 false不會將--test
標誌傳遞給 rustc)。
避免 rust_library 和 rust_test 之間重複
當您透過嵌套模組使用內嵌 Rust 測試時,最終會在Android.bp
檔案中出現重複。問題是您必須列出依賴項兩次,一次用於rust_library
,一次用於rust_test
:
rust_library {
name: "libfoo",
srcs: ["src/lib.rs"],
rustlibs: [
"libx",
"liby",
"libz",
],
}
rust_test {
name: "libfoo_inline_tests",
srcs: ["src/lib.rs"],
test_suites: ["general_tests"],
rustlibs: [
"libx",
"liby",
"libz",
],
}
每個rust_test
模組最終都會列出與對應rust_library
模組相同的依賴項。為了確保模組之間的一致性,您可以在rust_defaults
模組中僅列出一次依賴項:
rust_defaults {
name: "libfoo_defaults",
srcs: ["src/lib.rs"],
rustlibs: [
"libx",
"liby",
"libz",
],
}
rust_library {
name: "libfoo",
defaults: ["libfoo_defaults"],
}
rust_test {
name: "libfoo_inline_tests",
defaults: ["libfoo_defaults"],
test_suites: ["general_tests"],
}
這樣,庫和測試模組將始終使用相同的依賴項。