Bu sayfada, Rust test düzeneğini kullanan bir rust_test
modülünün nasıl oluşturulacağı hakkında temel bilgiler verilmektedir.
Temel bir Rust testi yazma
Cihaz üzerinde ve ana makine üzerinde Rust testine dair canlı bir örnek için keystore2 Android.bp dosyasını görüntüleyin veya external/rust/crates
dizinindeki birçok sandıkta bir tane bulun.
rust_test
modülü, #[test]
özelliğiyle işaretlenmiş kodlardan testler oluşturan rustc'nin --test
işareti kullanılarak oluşturulur. Daha fazla bilgi için The Rust Reference Testing Attributes (Rust Referans Testi Özellikleri) dokümanı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 TEST_MAPPING dosyası oluşturursanız bu dosyaya eklediğiniz testler gönderme öncesi testlerde çalıştırılır ve atest
kullanılarak çağrılabilir.
Daha fazla bilgi için TEST_MAPPING belgelerine göz atabilirsiniz. Ancak libfoo_inline_tests
örneğinde, test çalıştırmalarınızı TreeHugger'da etkinleştirmek için bu kodu göndermeden önce ekleyin:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
rust_test_host
modüllerinin, unit_tests:
false
olarak ayarlanmadığı sürece varsayılan olarak ön gönderme aşamasında çalıştığını unutmayın. Bu nedenle, bunları TEST_MAPPING
dosyalarında bildirmeniz gerekmez.
auto_gen_config
ve test_suites
özelliklerinin işleyiş şekli hakkında daha fazla bilgi için Test Geliştirme İş Akışı dokümanlarının Ayarlar bölümüne bakın.
Önemli Rust test özellikleri
rust_test
modülleri, İkili 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 davranışlar sergiler.
- test_harness: Gelişmiş kullanım, varsayılan olarak true'dur.
rust_test
kendi test düzeneğini uyguluyorsa ve yerleşik Rust test düzeneğini kullanmanız gerekmiyorsa (diğer bir deyişle, bu değeri false olarak ayarlamak --test
işaretini rustc'ye geçirmez) bu değeri false olarak ayarlayın.
rust_library ve rust_test arasında yinelenmeyi önleme
Yerleşik Rust testlerini iç içe geçmiş modüller aracılığıyla kullandığınızda Android.bp
dosyanızda yinelenen kodlar oluşur. Sorun, bağımlılıkları iki kez listelemeniz gerektiğidir: bir kez rust_library
için, 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 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ı 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.