تقدِّم هذه الصفحة معلومات أساسية حول كيفية إنشاء وحدة rust_test تستخدِم أداة اختبار Rust.
كتابة اختبار Rust أساسي
للاطّلاع على مثال مباشر لاختبار Rust على الجهاز فقط والمضيف، يمكنك عرض
keystore2 Android.bp،
أو العثور على أحد الاختبارات في العديد من الحزم في الدليل external/rust/crates.
تنشئ وحدة rust_test باستخدام العلامة --test في rustc، ما يؤدي إلى إنشاء اختبارات من الرمز الذي تم وضع علامة #[test] عليه. لمزيد من المعلومات، يمكنك الاطّلاع على
مستندات سمات الاختبار في مرجع Rust.
يمكنك تحديد وحدة اختبار على النحو التالي:
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 يتم تشغيلها تلقائيًا في الإرسال المسبق ما لم يتم ضبط unit_tests: على false، لذا ليس عليك الإعلان عن هذه الوحدات في ملفات TEST_MAPPING.
لمزيد من المعلومات حول طريقة عمل سمتَي auto_gen_config وtest_suites،
يمكنك الاطّلاع على قسم الإعدادات
في مستندات سير عمل تطوير الاختبار.
سمات اختبار Rust البارزة
تتضمّن وحدات rust_test سمات من وحدات rust_binary كما هو موضّح في
صفحة وحدات الملفات التنفيذية.
بالإضافة إلى السمات المهمة الشائعة التي تنطبق على جميع الوحدات، يتم تحديد السمات في الجدول أدناه. تتسم هذه السمات بأهمية خاصة لوحدات اختبار Rust، أو تعرض سلوكًا فريدًا خاصًا بنوع وحدة rust_test.
- test_harness: استخدام متقدّم، القيمة التلقائية هي "صحيح".
اضبط هذه السمة على "خطأ" إذا كانت وحدة rust_test تنفّذ أداة اختبار خاصة بها ولا تحتاج إلى استخدام أداة اختبار Rust المضمّنة (بعبارة أخرى، ضبط هذه السمة على "خطأ"
لن يؤدي إلى تمرير العلامة --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"],
}
بهذه الطريقة، ستستخدِم المكتبة ووحدة الاختبار دائمًا التبعيات نفسها.