בדף הזה מופיע מידע בסיסי על בניית מודול rust_test
שמשתמשת ב'רצועת בדיקה של חלודה'.
כתיבה של בדיקת חלודה בסיסית
לדוגמה פעילה של בדיקת Rust במכשיר ובמארח, אפשר לעיין ב-keystore2 Android.bp, או לאתר בדיקה כזו באחד מה-crates הרבים בספרייה 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 כדי לקבל מידע נוסף, אבל בדוגמה של libfoo_inline_tests
, צריך להוסיף את הקטע הבא לקובץ presubmit כדי להפעיל את הרצת הבדיקות ב-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
כשמשתמשים בבדיקות 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"],
}
כך הספרייה ומודול הבדיקה ישתמשו תמיד באותם יחסי תלות.