מבחן מודולים

דף זה מספק מידע בסיסי כיצד לבנות מודול rust_test המשתמש ברתמת בדיקת Rust.

כתוב מבחן חלודה בסיסי

לדוגמא חיה של בדיקת חלודה במכשיר ובמארח, הצג את keystore2 Android.bp , או אתר אחד ברבים מהארגזים בספריית external/rust/crates .

מודול rust_test בונה באמצעות דגל --test של rustc, אשר יוצר בדיקות מתוך קוד המסומן בתכונה #[test] . למידע נוסף, עיין בתיעוד The 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 , הוסף את זה כדי לשלוח מראש כדי לאפשר את ריצות הבדיקה שלך ב-TreeHugger:

{
  "presubmit": [
    {
      "name": "libfoo_inline_tests",
    },
  ]
}

שים לב שמודול rust_test_host פועלים כברירת מחדל ב-presubmit, אלא אם כן 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

כאשר אתה משתמש במבחני חלודה מוטבעים באמצעות מודולים מקוננים, אתה בסופו של דבר עם שכפול בקובץ 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"],
}

בדרך זו, הספרייה ומודול הבדיקה תמיד ישתמשו באותן תלות.