โมดูลทดสอบ

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