اختبار الوحدات

توفّر هذه الصفحة معلومات أساسية حول كيفية إنشاء وحدة 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"],
}

بهذه الطريقة، ستستخدم المكتبة ووحدة الاختبار دائمًا نفس التبعيات.