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