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