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