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