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