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