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

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

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