בדף הזה מוסבר איך לבנות מודול 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, צריך להוסיף את הקוד הבא ל-presubmit בדוגמה libfoo_inline_tests
:
{
"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"],
}
כך, הספרייה ומודול הבדיקה תמיד ישתמשו באותם פריטים בקשרי תלות.