โมดูลทดสอบ

หน้านี้ให้ข้อมูลพื้นฐานเกี่ยวกับวิธีสร้างโมดูล rust_test ที่ใช้ชุดเครื่องมือทดสอบ Rust

เขียนการทดสอบ Rust ขั้นพื้นฐาน

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

วิธีนี้จะทำให้ไลบรารีและโมดูลการทดสอบใช้การขึ้นต่อกันแบบเดียวกันเสมอ