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