Halaman ini memberikan informasi dasar tentang cara mem-build modul rust_test
yang menggunakan harness pengujian Rust.
Menulis pengujian Rust dasar
Untuk contoh langsung pengujian Rust di perangkat dan di host, lihat
keystore2 Android.bp,
atau mencari satu di banyak kotak dalam direktori external/rust/crates
.
Modul rust_test
di-build menggunakan flag --test
rustc, yang membuat pengujian
dari kode yang ditandai dengan atribut #[test]
. Untuk informasi selengkapnya, lihat
The Rust Reference Testing Attributes
dokumentasi layanan.
Tentukan modul pengujian sebagai berikut:
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",
],
}
File TEST_MAPPING
berisi daftar pengujian. Meskipun bukan persyaratan,
jika Anda membuat file TEST_MAPPING, pengujian yang Anda sertakan di dalamnya akan berjalan di
melakukan pra-pengiriman pengujian, dan dapat dipanggil menggunakan atest
.
Anda dapat mereferensikan dokumentasi TEST_MAPPING
untuk mengetahui informasi selengkapnya, tetapi untuk contoh libfoo_inline_tests
, tambahkan ini ke
pra-pengiriman untuk mengaktifkan pengujian yang berjalan di TreeHugger:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
Perlu diketahui bahwa modul rust_test_host
berjalan secara default dalam pra-pengiriman kecuali
unit_tests:
disetel ke false
, jadi Anda tidak perlu mendeklarasikannya
dalam file TEST_MAPPING
.
Untuk informasi selengkapnya tentang cara kerja properti auto_gen_config
dan test_suites
,
lihat bagian Setelan
dokumentasi Alur Kerja Pengembangan Pengujian.
Properti pengujian Rust yang penting
Modul rust_test
mewarisi properti dari modul rust_binary
seperti yang dijelaskan di
halaman
Modul Biner.
Properti yang ditentukan dalam tabel di bawah ini adalah tambahan dari
Properti umum yang penting
yang berlaku untuk semua modul. Hal ini sangat penting bagi Rust
modul pengujian, atau menunjukkan perilaku unik spesifik untuk jenis modul rust_test
.
- test_harness: Penggunaan lanjutan, default-nya adalah benar.
Tetapkan ini ke false jika rust_test
Anda mengimplementasikan rangkaian pengujiannya sendiri dan Anda tidak
menggunakan memanfaatkan alat uji Rust bawaan (dengan kata lain, menyetelnya ke false)
tidak akan meneruskan flag --test
ke rustc).
Menghindari duplikasi antara rust_library dan rust_test
Saat Anda menggunakan pengujian Rust inline melalui modul bertingkat, Anda akan mendapatkan duplikasi
dalam file Android.bp
Anda. Masalahnya adalah Anda harus
membuat daftar dependensi
dua kali, sekali untuk rust_library
dan sekali untuk 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",
],
}
Setiap modul rust_test
akan mencantumkan dependensi yang sama dengan
modul rust_library
yang sesuai. Untuk memastikan konsistensi di antara modul,
Anda dapat mencantumkan dependensi hanya sekali dalam modul 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"],
}
Dengan cara ini, library dan modul pengujian akan selalu menggunakan dependensi yang sama.