โมดูลทดสอบ

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

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