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

यह पेज rust_test मॉड्यूल बनाने के बारे में बुनियादी जानकारी देता है जो रस्ट टेस्ट हार्नेस का इस्तेमाल करता है.

एक बुनियादी रस्ट टेस्ट लिखना

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

rustc के --test फ़्लैग का इस्तेमाल करके, rust_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 उदाहरण के लिए, इसे TreHugger पर अपने टेस्ट रन चालू करने के लिए, पहले से सबमिट करें:

{
  "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 फ़्लैग को rustc पर नहीं भेजा जाएगा).

rust_library और rust_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"],
}

इस तरह, लाइब्रेरी और टेस्ट मॉड्यूल हमेशा एक ही डिपेंडेंसी का इस्तेमाल करेंगे.