تقدّم هذه الصفحة معلومات أساسية عن كيفية إنشاء وحدة 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
، أضِف ما يلي إلى 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: استخدام متقدّم، القيمة التلقائية هي true.
اضبط هذا الخيار على خطأ إذا كان 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"],
}
بهذه الطريقة، ستستخدم المكتبة ووحدة الاختبار دائمًا التبعيات نفسها.