این صفحه اطلاعات اولیه در مورد نحوه ساخت ماژول rust_test
که از مهار تست Rust استفاده می کند، ارائه می دهد.
یک تست اولیه Rust بنویسید
برای مثالی زنده از تست Rust روی دستگاه و روی میزبان، keystore2 Android.bp را مشاهده کنید، یا یکی را در بسیاری از جعبههای موجود در فهرست external/rust/crates
پیدا کنید.
یک ماژول rust_test
با استفاده از پرچم --test
rustc ساخته میشود، که تستهایی را خارج از کد علامتگذاری شده با ویژگی #[test]
ایجاد میکند. برای اطلاعات بیشتر، به مستندات The Rust Reference Testing Attributes مراجعه کنید.
یک ماژول تست را به صورت زیر تعریف کنید:
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
حاوی لیستی از آزمایشات است. اگرچه الزامی نیست، اما اگر یک فایل TEST_MAPPING ایجاد کنید، آزمایشهایی که در آن قرار میدهید در آزمایشهای پیش ارسال اجرا میشوند و میتوان با استفاده از atest
فراخوانی کرد.
میتوانید برای اطلاعات بیشتر به سند TEST_MAPPING مراجعه کنید، اما برای مثال libfoo_inline_tests
، این را برای پیشفرستادن اضافه کنید تا آزمایشهای خود را در TreeHugger فعال کنید:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
توجه داشته باشید که ماژولهای rust_test_host
بهطور پیشفرض در presubmit اجرا میشوند، مگر اینکه unit_tests:
روی false
تنظیم شده باشد، بنابراین نیازی نیست این موارد را در فایلهای TEST_MAPPING
اعلام کنید.
برای اطلاعات بیشتر در مورد نحوه عملکرد ویژگیهای auto_gen_config
و test_suites
، به بخش تنظیمات در مستندات گردش کار توسعه تست مراجعه کنید.
ویژگی های قابل توجه تست زنگ
ماژولهای rust_test
خواص را از ماژولهای rust_binary
به ارث میبرند که در صفحه ماژولهای باینری توضیح داده شده است.
ویژگی های تعریف شده در جدول زیر علاوه بر ویژگی های مشترک مهم مهم است که برای همه ماژول ها اعمال می شود. اینها یا به ویژه برای ماژولهای تست Rust مهم هستند، یا رفتار منحصربهفردی مخصوص نوع ماژول rust_test
از خود نشان میدهند.
- test_harness : استفاده پیشرفته، پیش فرض درست است.
اگر rust_test
شما هارنس تست خود را پیاده سازی می کند و نیازی به استفاده از مهار تست داخلی Rust ندارید، این را روی false تنظیم کنید (به عبارت دیگر، با تنظیم آن روی false پرچم --test
به rustc منتقل نمی شود).
از تکرار بین rust_library و rust_test خودداری کنید
هنگامی که از تستهای Rust درون خطی از طریق ماژولهای تودرتو استفاده میکنید، در نهایت در فایل Android.bp
خود تکراری خواهید شد. مشکل این است که شما باید دو بار وابستگی ها را لیست کنید، یک بار برای rust_library
و یک بار برای 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",
],
}
هر ماژول rust_test
در نهایت همان وابستگیهای ماژول rust_library
مربوطه را فهرست میکند. برای اطمینان از سازگاری بین ماژول ها، می توانید وابستگی ها را فقط یک بار در یک ماژول 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"],
}
به این ترتیب، کتابخانه و ماژول تست همیشه از وابستگی های یکسانی استفاده می کنند.