Halaman ini memberikan informasi dasar tentang cara membuat modul rust_test
yang menggunakan rangkaian uji Rust.
Menulis tes Karat dasar
Untuk contoh langsung pengujian Karat di perangkat dan di host, lihat keystore2 Android.bp , atau temukan satu di banyak peti di direktori external/rust/crates
.
Modul rust_test
dibuat menggunakan flag --test
, yang membuat pengujian dari kode yang ditandai dengan atribut #[test]
. Untuk informasi selengkapnya, lihat dokumentasi Atribut Pengujian Referensi Karat .
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 tes. Meskipun ini bukan persyaratan, jika Anda membuat file TEST_MAPPING, pengujian yang Anda sertakan di dalamnya akan berjalan dalam pengujian pra-pengiriman, dan dapat dipanggil menggunakan atest
.
Anda dapat mereferensikan dokumentasi TEST_MAPPING untuk informasi selengkapnya, tetapi untuk contoh libfoo_inline_tests
, tambahkan ini ke prapengiriman untuk mengaktifkan pengujian Anda di TreeHugger:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
Perhatikan bahwa modul rust_test_host
dijalankan secara default di prapengiriman 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 Pengaturan dari dokumentasi Alur Kerja Pengembangan Pengujian .
Sifat uji Karat yang Terkemuka
Modul rust_test
mewarisi properti dari modul rust_binary
seperti yang dijelaskan pada halaman Modul Biner .
Properti yang ditentukan dalam tabel di bawah ini adalah tambahan dari Properti umum penting yang berlaku untuk semua modul. Ini sangat penting untuk modul uji Rust, atau menunjukkan perilaku unik khusus untuk jenis modul rust_test
.
- test_harness : Penggunaan lanjutan, default ke true.
Setel ini ke false jika rust_test
Anda mengimplementasikan test harness sendiri dan Anda tidak perlu menggunakan built-in test harness Rust (dengan kata lain, menyetel ini ke false tidak akan meneruskan flag --test
ke rustc).
Menghindari duplikasi antara rust_library
dan rust_test
Saat Anda menggunakan tes Rust inline melalui modul bersarang, Anda akan berakhir dengan duplikasi di 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 berakhir dengan mencantumkan dependensi yang sama dengan modul rust_library
yang sesuai. Untuk memastikan konsistensi antar modul, Anda dapat membuat daftar 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, perpustakaan dan modul pengujian akan selalu menggunakan dependensi yang sama.