इस पेज पर, Rust टेस्ट हार्नेस का इस्तेमाल करने वाले rust_test
मॉड्यूल को बनाने का बुनियादी तरीका बताया गया है.
Rust में बुनियादी टेस्ट लिखना
डिवाइस पर और ऑन-होस्ट रस्ट टेस्ट के लाइव उदाहरण के लिए, देखें
keystore2 Android.bp, और
या external/rust/crates
डायरेक्ट्री में मौजूद अलग-अलग क्रेट में से किसी एक को ढूंढा जा सकता है.
rustc के --test
फ़्लैग का इस्तेमाल करके, rust_test
मॉड्यूल बनाया गया है, जिससे टेस्ट तैयार होते हैं
#[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
उदाहरण के लिए, इसे
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
अपना टेस्ट हार्नेस लागू करता है और आपको Rust के पहले से मौजूद टेस्ट हार्नेस का इस्तेमाल करने की ज़रूरत नहीं है, तो इसे 'गलत' पर सेट करें. दूसरे शब्दों में, इसे 'गलत' पर सेट करने से, rustc को --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"],
}
इस तरह, लाइब्रेरी और टेस्ट मॉड्यूल हमेशा एक ही डिपेंडेंसी का इस्तेमाल करेंगे.