Na tej stronie znajdziesz podstawowe informacje o tym, jak utworzyć moduł rust_test, który korzysta z platformy testowej Rust.
Pisanie podstawowego testu w języku Rust
Aby zobaczyć na żywo przykład testu w języku Rust na urządzeniu i na hoście, otwórz
plik keystore2 Android.bp,
lub znajdź go w jednym z wielu pakietów w katalogu external/rust/crates.
Moduł rust_test jest tworzony za pomocą flagi --test kompilatora rustc, która tworzy testy z kodu oznaczonego atrybutem #[test]. Więcej informacji znajdziesz w
dokumentacji The Rust Reference Testing Attributes.
Zdefiniuj moduł testowy w ten sposób:
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",
],
}
Plik TEST_MAPPING zawiera listę testów. Nie jest to wymagane,
ale jeśli utworzysz plik TEST_MAPPING, testy w nim zawarte będą uruchamiane w
testach wstępnych i można je wywołać za pomocą atest.
Więcej informacji znajdziesz w dokumentacji TEST_MAPPING, ale w przypadku przykładu libfoo_inline_tests dodaj to do
presubmit, aby włączyć uruchamianie testów w TreeHugger:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
Pamiętaj, że moduły rust_test_host są domyślnie uruchamiane w testach wstępnych, chyba że unit_tests: jest ustawione na false, więc nie musisz deklarować ich w plikach TEST_MAPPING.
Więcej informacji o tym, jak działają właściwości auto_gen_config i test_suites,
znajdziesz w sekcji Ustawienia
w dokumentacji Przepływ pracy przy tworzeniu testów.
Ważne właściwości testów w języku Rust
Moduły rust_test dziedziczą właściwości z modułów rust_binary, jak opisano na
stronie Moduły binarne.
Właściwości zdefiniowane w tabeli poniżej są dodatkiem do
ważnych właściwości wspólnych
, które mają zastosowanie do wszystkich modułów. Są one szczególnie ważne w przypadku modułów testowych w języku Rust lub wykazują unikalne zachowanie charakterystyczne dla typu modułu rust_test.
- test_harness: zaawansowane użycie, domyślnie ustawione na true.
Ustaw tę wartość na false, jeśli moduł rust_test implementuje własną platformę testową i nie
musisz używać wbudowanej platformy testowej Rust (innymi słowy, ustawienie tej wartości na false
nie spowoduje przekazania flagi --test do kompilatora rustc).
Unikanie duplikowania między rust_library a rust_test
Gdy używasz testów w języku Rust wbudowanych w moduły zagnieżdżone, w pliku Android.bp dochodzi do duplikowania. Problem polega na tym, że musisz dwukrotnie wymienić zależności – raz w przypadku rust_library i raz w przypadku 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",
],
}
Każdy moduł rust_test będzie zawierał te same zależności co odpowiadający mu moduł rust_library. Aby zapewnić spójność między modułami, możesz wymienić zależności tylko raz w module 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"],
}
Dzięki temu biblioteka i moduł testowy będą zawsze używać tych samych zależności.