โมดูลทดสอบ

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

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