หน้านี้ให้ข้อมูลพื้นฐานเกี่ยวกับวิธีสร้าง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"],
}
วิธีนี้จะทำให้ไลบรารีและโมดูลทดสอบใช้การอ้างอิงเดียวกันเสมอ