Na tej stronie znajdziesz podstawowe informacje o tworzeniu modułu rust_test
, który korzysta z testów Rust.
Pisanie podstawowego testu Rust
Aby zobaczyć przykład testu Rust na urządzeniu i hosta, wyświetl
keystore2 Android.bp
lub znajdź jedną ze skrzyń w katalogu external/rust/crates
.
Kompilacja modułu rust_test
jest wykonywana za pomocą flagi rustc --test
, która tworzy testy z kodu oznaczonego atrybutem #[test]
. Więcej informacji:
Atrybuty Rust Reference Testing
dokumentacji.
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. Chociaż nie jest to wymagane, jeśli utworzysz plik TEST_MAPPING, testy, które się w nim znajdują, będą uruchamiane w ramach testów przed przesłaniem i można je wywołać za pomocą atest
.
Zapoznaj się z dokumentacją TEST_MAPPING
, ale w przykładzie libfoo_inline_tests
dodaj go do
przed przesłaniem, aby umożliwić uruchomienia testów w TreeHugger:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
Pamiętaj, że moduły rust_test_host
są domyślnie uruchamiane przed przesłaniem, chyba że parametr unit_tests:
ma wartość false
, więc nie musisz ich deklarować w plikach TEST_MAPPING
.
Więcej informacji o działaniu właściwości auto_gen_config
i test_suites
znajdziesz
Więcej informacji znajdziesz w sekcji Ustawienia
dokumentacji procesu opracowywania testów.
Właściwości testowe Rust
Moduły rust_test
dziedziczą właściwości z modułów rust_binary
, jak opisano na stronie
moduły binarne
stronę.
Właściwości zdefiniowane w tabeli poniżej są uzupełnieniem
Ważne właściwości
który dotyczy wszystkich modułów. Są one szczególnie ważne z punktu widzenia
modułów testowych lub zachowania charakterystyczne dla typu modułu rust_test
.
- test_harness: użycie zaawansowane, domyślnie wartość „true” (prawda).
Ustaw tę wartość na „false”, jeśli rust_test
używa własnej jarzma testowej, a Ty jej nie używasz
Konieczność użycia wbudowanej jarzma testowego Rust (czyli ustawienie wartości false)
nie przekazuje flagi --test
do rustc).
Unikaj powielania między rust_library i rust_test
Używanie wbudowanych testów Rust za pomocą zagnieżdżonych modułów powoduje duplikowanie
w pliku Android.bp
. Problem polega na tym, że musisz podać listę zależności rust_library
i 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 wyświetlić 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 zawsze korzystają z tych samych zależności.