Questa pagina fornisce informazioni di base su come costruire un modulo rust_test
che utilizza il test cablaggio Rust.
Scrivi un test Rust di base
Per un esempio dal vivo di un test Rust sul dispositivo e sull'host, visualizza keystore2 Android.bp o individuane uno tra molti crate nella directory external/rust/crates
.
Un modulo rust_test
viene creato utilizzando il flag --test
di Rustc, che crea test dal codice contrassegnato con l'attributo #[test]
. Per ulteriori informazioni, consultare la documentazione The Rust Reference Testing Attributes .
Definire un modulo di test come segue:
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",
],
}
Un file TEST_MAPPING
contiene un elenco di test. Sebbene non sia un requisito, se crei un file TEST_MAPPING, i test che includi in esso verranno eseguiti nei test di preinvio e potranno essere richiamati utilizzando atest
.
Puoi fare riferimento alla documentazione TEST_MAPPING per ulteriori informazioni, ma per l'esempio libfoo_inline_tests
, aggiungi questo al preinvio per abilitare l'esecuzione del test su TreeHugger:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
Tieni presente che i moduli rust_test_host
vengono eseguiti per impostazione predefinita in presubmit a meno che unit_tests:
non sia impostato su false
, quindi non è necessario dichiararli nei file TEST_MAPPING
.
Per ulteriori informazioni su come funzionano le proprietà auto_gen_config
e test_suites
, vedere la sezione Impostazioni della documentazione del flusso di lavoro di sviluppo test .
Notevoli proprietà del test della ruggine
I moduli rust_test
ereditano le proprietà dai moduli rust_binary
come descritto nella pagina Moduli binari .
Le proprietà definite nella tabella seguente sono in aggiunta alle importanti proprietà comuni che si applicano a tutti i moduli. Questi sono particolarmente importanti per i moduli di test Rust o mostrano un comportamento unico specifico per il tipo di modulo rust_test
.
- test_harness : utilizzo avanzato, il valore predefinito è true.
Impostalo su false se il tuo rust_test
implementa il proprio test Harness e non hai bisogno di utilizzare il test Harness integrato in Rust (in altre parole, impostandolo su False non passerà il flag --test
a Rust).
Evita la duplicazione tra ruggine_library e ruggine_test
Quando utilizzi i test Rust in linea tramite moduli nidificati, ti ritroverai con la duplicazione nel tuo file Android.bp
. Il problema è che devi elencare le dipendenze due volte, una volta per rust_library
e una volta per 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",
],
}
Ogni modulo rust_test
finirà per elencare le stesse dipendenze del corrispondente modulo rust_library
. Per garantire la coerenza tra i moduli, puoi elencare le dipendenze solo una volta in un modulo 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"],
}
In questo modo, la libreria e il modulo di test utilizzeranno sempre le stesse dipendenze.