Bu sayfada Rust test donanımını kullanan bir rust_test
modülünün nasıl oluşturulacağı hakkında temel bilgiler verilmektedir.
Temel bir Rust testi yazın
Cihaz içi ve ana bilgisayardaki Rust testinin canlı bir örneği için keystore2 Android.bp dosyasını görüntüleyin veya external/rust/crates
dizinindeki birçok kasadan birini bulun.
Bir rust_test
modülü, #[test]
özelliğiyle işaretlenmiş koddan testler oluşturan Rusc'ın --test
bayrağını kullanarak oluşturulur. Daha fazla bilgi için Rust Referans Testi Nitelikleri belgelerine bakın.
Bir test modülünü aşağıdaki gibi tanımlayın:
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",
],
}
Bir TEST_MAPPING
dosyası testlerin bir listesini içerir. Bir gereklilik olmasa da, bir TEST_MAPPING dosyası oluşturursanız, içine dahil ettiğiniz testler gönderim öncesi testlerde çalıştırılır ve atest
kullanılarak çağrılabilir.
Daha fazla bilgi için TEST_MAPPING belgelerine başvurabilirsiniz, ancak libfoo_inline_tests
örneği için, TreeHugger'da test çalıştırmalarınızı etkinleştirmek üzere bunu ön gönderime ekleyin:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
unit_tests:
false
olarak ayarlanmadığı sürece, rust_test_host
modüllerinin varsayılan olarak ön gönderimde çalıştığını unutmayın, dolayısıyla bunları TEST_MAPPING
dosyalarında bildirmenize gerek yoktur.
auto_gen_config
ve test_suites
özelliklerinin nasıl çalıştığı hakkında daha fazla bilgi için Test Geliştirme İş Akışı belgelerinin Ayarlar bölümüne bakın.
Önemli Rust testi özellikleri
rust_test
modülleri, İkili Modüller sayfasında açıklandığı gibi, rust_binary
modüllerinin özelliklerini devralır.
Aşağıdaki tabloda tanımlanan özellikler, tüm modüller için geçerli olan Önemli ortak özelliklere ek olarak verilmiştir. Bunlar ya Rust test modülleri için özellikle önemlidir ya da rust_test
modül tipine özgü benzersiz davranışlar sergiler.
- test_harness : Gelişmiş kullanım, varsayılan olarak true'dur.
rust_test
kendi test donanımını uyguluyorsa ve yerleşik Rust test donanımını kullanmanıza gerek yoksa bunu false olarak ayarlayın (başka bir deyişle, bunu false olarak ayarlamak --test
bayrağını Rusc'a iletmeyecektir ).
Rust_library ve Rust_test arasındaki kopyalardan kaçının
İç içe geçmiş modüller aracılığıyla satır içi Rust testlerini kullandığınızda, Android.bp
dosyanızda çoğaltmayla karşılaşırsınız. Sorun şu ki, bağımlılıkları iki kez listelemeniz gerekiyor; bir kez rust_library
için ve bir kez de rust_test
için:
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",
],
}
Her bir rust_test
modülü, karşılık gelen rust_library
modülüyle aynı bağımlılıkları listeleyecektir. Modüller arasında tutarlılığı sağlamak için bağımlılıkları bir rust_defaults
modülünde yalnızca bir kez listeleyebilirsiniz:
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"],
}
Bu şekilde kütüphane ve test modülü her zaman aynı bağımlılıkları kullanacaktır.