דף זה מספק מידע בסיסי כיצד לבנות מודול 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"],
}
בדרך זו, הספרייה ומודול הבדיקה תמיד ישתמשו באותן תלות.