בדף הזה מוסבר איך לבנות מודול rust_test שמשתמש ב-Rust test harness.
כתיבת בדיקה בסיסית ב-Rust
כדי לראות דוגמה חיה של בדיקת Rust במכשיר ובמארח, אפשר לעיין ב-keystore2 Android.bp או לחפש בדיקה כזו בתיקיות רבות בספרייה external/rust/crates.
מודול rust_test נוצר באמצעות הדגל --test של rustc, שיוצר בדיקות מקוד שמסומן במאפיין #[test]. מידע נוסף מופיע במאמר The Rust 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 כדי לקבל מידע נוסף, אבל כדי להפעיל את הרצת הבדיקות ב-TreeHugger, צריך להוסיף את הקוד הבא לדוגמה libfoo_inline_tests ל-presubmit:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
הערה: מודולים של rust_test_host פועלים כברירת מחדל ב-presubmit, אלא אם הערך של unit_tests: מוגדר כ-false, לכן אין צורך להצהיר על המודולים האלה בקובצי TEST_MAPPING.
מידע נוסף על אופן הפעולה של המאפיינים auto_gen_config ו-test_suites זמין בקטע הגדרות במאמר תהליך העבודה של פיתוח בדיקות.
מאפייני בדיקה חשובים ב-Rust
המודולים 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"],
}
כך, הספרייה ומודול הבדיקה תמיד ישתמשו באותן תלויות.