หน้านี้ให้ข้อมูลพื้นฐานเกี่ยวกับวิธีสร้างโมดูล rust_test ที่ใช้ชุดเครื่องมือทดสอบ Rust
เขียนการทดสอบ Rust ขั้นพื้นฐาน
หากต้องการดูตัวอย่างการทดสอบ Rust แบบสดๆ ในอุปกรณ์และในโฮสต์ ให้ดู
keystore2 Android.bp,
หรือค้นหาตัวอย่างในลังจำนวนมากในไดเรกทอรี external/rust/crates
โมดูล rust_test สร้างขึ้นโดยใช้แฟล็ก --test ของ rustc ซึ่งจะสร้างการทดสอบจากโค้ดที่มาร์กด้วยแอตทริบิวต์ #[test] ดูข้อมูลเพิ่มเติมได้ที่
เอกสารประกอบแอตทริบิวต์การทดสอบของการอ้างอิง Rust
กำหนดโมดูลการทดสอบดังนี้
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 ที่สำคัญ
โมดูล rust_test รับช่วงค่าพร็อพเพอร์ตี้จากโมดูล rust_binary ตามที่อธิบายไว้ใน
หน้าโมดูลไบนารี
พร็อพเพอร์ตี้ที่กำหนดไว้ในตารางด้านล่างนี้เป็นพร็อพเพอร์ตี้เพิ่มเติมจาก
พร็อพเพอร์ตี้ทั่วไปที่สำคัญ
ซึ่งใช้ได้กับโมดูลทั้งหมด พร็อพเพอร์ตี้เหล่านี้มีความสำคัญเป็นพิเศษสำหรับโมดูลการทดสอบ Rust หรือแสดงลักษณะการทำงานที่ไม่ซ้ำกันซึ่งเฉพาะเจาะจงกับประเภทโมดูล rust_test
- test_harness: การใช้งานขั้นสูง ค่าเริ่มต้นเป็น "จริง"
ตั้งค่านี้เป็น "เท็จ" หาก rust_test ใช้ชุดเครื่องมือทดสอบของตัวเอง และคุณไม่
จำเป็นต้องใช้ชุดเครื่องมือทดสอบ Rust ในตัว (กล่าวคือ การตั้งค่านี้เป็น "เท็จ"
จะไม่ส่งแฟล็ก --test ไปยัง rustc)
หลีกเลี่ยงการทำซ้ำระหว่าง rust_library กับ rust_test
เมื่อใช้การทดสอบ Rust แบบอินไลน์ผ่านโมดูลที่ซ้อนกัน คุณจะพบการทำซ้ำในไฟล์ Android.bp ปัญหาคือคุณต้องระบุการขึ้นต่อกัน 2 ครั้ง ครั้งหนึ่งสำหรับ 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"],
}
วิธีนี้จะทำให้ไลบรารีและโมดูลการทดสอบใช้การขึ้นต่อกันแบบเดียวกันเสมอ