इस पेज पर, रस्ट टेस्ट हार्नेस का इस्तेमाल करने वाला rust_test
मॉड्यूल बनाने के बारे में बुनियादी जानकारी दी गई है.
Rust में बुनियादी टेस्ट लिखना
डिवाइस पर और होस्ट पर मौजूद रस्ट टेस्ट का लाइव उदाहरण देखने के लिए, keystore2 Android.bp देखें या external/rust/crates
डायरेक्ट्री में दिए गए अलग-अलग क्रेट में से कोई एक ढूंढें.
rust_test
मॉड्यूल, rustc के --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
उदाहरण के लिए, TreeHugger पर टेस्ट रन चालू करने के लिए, इसे पहले सबमिट करने के लिए जोड़ें:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
ध्यान दें कि जब तक unit_tests:
को false
पर सेट नहीं किया जाता, तब तक पहले से सबमिट करने की सुविधा में rust_test_host
मॉड्यूल डिफ़ॉल्ट रूप से चलते हैं. इसका मतलब है कि आपको TEST_MAPPING
फ़ाइलों में इनके बारे में एलान करने की ज़रूरत नहीं है.
auto_gen_config
और test_suites
प्रॉपर्टी के काम करने के तरीके के बारे में ज़्यादा जानने के लिए, टेस्ट डेवलपमेंट वर्कफ़्लो दस्तावेज़ का सेटिंग सेक्शन देखें.
Rust टेस्ट की खास प्रॉपर्टी
rust_test
मॉड्यूल, rust_binary
मॉड्यूल से प्रॉपर्टी इनहेरिट करते हैं, जैसा कि बाइनरी मॉड्यूल पेज पर बताया गया है.
नीचे दी गई टेबल में बताई गई प्रॉपर्टी, सभी मॉड्यूल पर लागू होने वाली ज़रूरी सामान्य प्रॉपर्टी के अलावा होती हैं. ये Rust के टेस्ट मॉड्यूल के लिए खास तौर पर ज़रूरी होते हैं या rust_test
मॉड्यूल टाइप के हिसाब से खास तरह का व्यवहार दिखाते हैं.
- test_harness: बेहतर इस्तेमाल के लिए, डिफ़ॉल्ट रूप से 'सही' पर सेट होता है.
अगर आपका rust_test
खुद का टेस्ट हार्नेस लागू करता है और आपको पहले से मौजूद Rust टेस्ट हार्नेस का इस्तेमाल करने की ज़रूरत नहीं है, तो इसे 'गलत' पर सेट करें. दूसरे शब्दों में, इसे गलत पर सेट करने से --test
फ़्लैग को rustc पर नहीं भेजा जा सकेगा.
रस्ट_लाइब्रेरी और रस्ट_टेस्ट के बीच डुप्लीकेशन से बचें
नेस्ट किए गए मॉड्यूल के ज़रिए इनलाइन 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"],
}
इस तरह, लाइब्रेरी और टेस्ट मॉड्यूल हमेशा एक ही डिपेंडेंसी का इस्तेमाल करेंगे.