หน้านี้ให้ข้อมูลพื้นฐานเกี่ยวกับวิธีสร้างrust_test
โมดูล
ที่ใช้เครื่องมือทดสอบ Rust
เขียนการทดสอบ Rust พื้นฐาน
ดูตัวอย่างจริงของการทดสอบ Rust ในอุปกรณ์และในโฮสต์ได้ที่
keystore2 Android.bp
หรือค้นหาในหลายๆ Crate ในไดเรกทอรี 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
จะทำงานในโหมดก่อนส่งโดยค่าเริ่มต้น เว้นแต่จะตั้งค่า 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"],
}
วิธีนี้จะทำให้ไลบรารีและโมดูลทดสอบใช้การอ้างอิงเดียวกันเสมอ