टेस्ट मॉड्यूल

यह पृष्ठ rust_test मॉड्यूल बनाने के बारे में बुनियादी जानकारी प्रदान करता है जो रस्ट टेस्ट हार्नेस का उपयोग करता है।

एक बुनियादी जंग परीक्षण लिखें

ऑन-डिवाइस और ऑन-होस्ट रस्ट परीक्षण के जीवंत उदाहरण के लिए, keystore2 Android.bp देखें, या external/rust/crates निर्देशिका में कई क्रेटों में से एक का पता लगाएं।

एक rust_test मॉड्यूल, रस्टसी के --test फ़्लैग का उपयोग करके बनाया जाता है, जो #[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 उदाहरण के लिए, ट्रीहुगर पर अपना परीक्षण चलाने में सक्षम करने के लिए इसे प्रीसबमिट में जोड़ें:

{
  "presubmit": [
    {
      "name": "libfoo_inline_tests",
    },
  ]
}

ध्यान दें कि rust_test_host मॉड्यूल प्रीसबमिट में डिफ़ॉल्ट रूप से चलते हैं जब तक कि unit_tests: false पर सेट न हो जाए, इसलिए आपको इन्हें TEST_MAPPING फ़ाइलों में घोषित करने की आवश्यकता नहीं है।

auto_gen_config और test_suites गुण कैसे काम करते हैं, इस बारे में अधिक जानकारी के लिए, टेस्ट डेवलपमेंट वर्कफ़्लो दस्तावेज़ का सेटिंग अनुभाग देखें।

उल्लेखनीय जंग परीक्षण गुण

जैसा कि बाइनरी मॉड्यूल पृष्ठ पर वर्णित है, rust_test मॉड्यूल rust_binary मॉड्यूल से गुण प्राप्त करते हैं।

नीचे दी गई तालिका में परिभाषित गुण उन महत्वपूर्ण सामान्य गुणों के अतिरिक्त हैं जो सभी मॉड्यूल पर लागू होते हैं। ये या तो रस्ट परीक्षण मॉड्यूल के लिए विशेष रूप से महत्वपूर्ण हैं, या rust_test मॉड्यूल प्रकार के लिए विशिष्ट अद्वितीय व्यवहार प्रदर्शित करते हैं।

  • test_harness : उन्नत उपयोग, डिफ़ॉल्ट सत्य पर।

यदि आपका rust_test अपने स्वयं के परीक्षण हार्नेस को लागू करता है और आपको अंतर्निहित रस्ट परीक्षण हार्नेस का उपयोग करने की आवश्यकता नहीं है, तो इसे गलत पर सेट करें (दूसरे शब्दों में, इसे गलत पर सेट करने से --test ध्वज को रस्टसी में पास नहीं किया जाएगा)।

रस्ट_लाइब्रेरी और रस्ट_टेस्ट के बीच दोहराव से बचें

जब आप नेस्टेड मॉड्यूल के माध्यम से इनलाइन रस्ट परीक्षण का उपयोग करते हैं, तो आप अपनी 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"],
}

इस तरह, लाइब्रेरी और परीक्षण मॉड्यूल हमेशा समान निर्भरता का उपयोग करेंगे।