Bu sayfada, Rust test donanımlarını kullanan bir rust_test
modülünün nasıl oluşturulacağıyla ilgili temel bilgiler verilmektedir.
Temel bir Rust testi yazma
Cihaz üzerinde ve ana makine üzerinde Rust testi için canlı bir örnek görmek isterseniz keystore2 Android.bp dosyasını görüntüleyin veya external/rust/crates
dizinindeki paketlerin çoğunda bir tane bulun.
rust_test
modülü, rustc'nin --test
işaretçisini kullanarak derlenir. Bu işaretçi, #[test]
özelliğiyle işaretlenmiş koddan testler oluşturur. Daha fazla bilgi için Rust Referans Test Özellikleri dokümanlarına bakın.
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",
],
}
TEST_MAPPING
dosyası, testlerin listesini içerir. Zorunlu olmasa da bir TEST_MAPPING dosyası oluşturursanız bu dosyaya eklediğiniz testler göndermeden önce testlerde çalıştırılır ve atest
kullanılarak çağrılabilir.
Daha fazla bilgi için TEST_MAPPING dokümanlarına göz atabilirsiniz. libfoo_inline_tests
örneğinde ise testlerinizin TreeHugger'da çalışmasını sağlamak için ön gönderme işlemine şunları ekleyin:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
unit_tests:
false
olarak ayarlanmadığında, rust_test_host
modüllerinin varsayılan olarak göndermeden önce çalıştığını unutmayın. Bu nedenle, bunları TEST_MAPPING
dosyalarında belirtmeniz gerekmez.
auto_gen_config
ve test_suites
özelliklerinin işleyiş şekli hakkında daha fazla bilgi için Test Geliştirme İş Akışı dokümanının Ayarlar bölümüne bakın.
Öne çıkan Rust test özellikleri
rust_test
modülleri, ikili modüller sayfasında açıklandığı gibi rust_binary
modüllerinden özellikleri 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, Rust test modülleri için özellikle önemlidir veya rust_test
modülü türüne özgü benzersiz bir davranış sergiler.
- test_harness: Gelişmiş kullanım, varsayılan olarak doğrudur.
rust_test
kendi test donanımınızı uyguluyorsa ve yerleşik Rust test donanımını kullanmanız gerekmiyorsa bu değeri false olarak ayarlayın (yani, bu değeri false olarak ayarladığınızda --test
işaretçisi rustc'ye geçmez).
rust_library ve rust_test arasında yinelemeden kaçının
İç içe yerleştirilmiş modüller aracılığıyla satır içi Rust testleri kullandığınızda Android.bp
dosyanızda yineleme oluşur. Sorun, bağımlılıklarını rust_library
için bir kez, rust_test
için bir kez olmak üzere iki kez listelemeniz gerektiğidir:
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 rust_test
modülü, ilgili rust_library
modülüyle aynı bağımlılıkları listeler. Modüller arasında tutarlılık sağlamak için bağımlılıklarını 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 sayede, kitaplık ve test modülü her zaman aynı bağımlılıkları kullanır.