এই পৃষ্ঠাটি কীভাবে একটি rust_test
মডিউল তৈরি করতে হয় যা মরিচা পরীক্ষার জোতা ব্যবহার করে সে সম্পর্কে প্রাথমিক তথ্য সরবরাহ করে।
একটি মৌলিক মরিচা পরীক্ষা লিখুন
একটি অন-ডিভাইস এবং অন-হোস্ট মরিচা পরীক্ষার একটি লাইভ উদাহরণের জন্য, keystore2 Android.bp দেখুন, বা external/rust/crates
ডিরেক্টরিতে অনেকগুলি ক্রেটে একটি সনাক্ত করুন৷
একটি rust_test
মডিউল rustc এর --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
উদাহরণের জন্য, TreeHugger-এ আপনার পরীক্ষা চালানো সক্ষম করার জন্য এটিকে পূর্বে জমা দিতে যোগ করুন:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
মনে রাখবেন যে rust_test_host
মডিউলগুলি presubmit-এ ডিফল্টভাবে চালিত হয় যদি না unit_tests:
false
তে সেট করা থাকে, তাই আপনাকে TEST_MAPPING
ফাইলে এগুলি ঘোষণা করতে হবে না।
auto_gen_config
এবং test_suites
বৈশিষ্ট্যগুলি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, টেস্ট ডেভেলপমেন্ট ওয়ার্কফ্লো ডকুমেন্টেশনের সেটিংস বিভাগটি দেখুন।
উল্লেখযোগ্য মরিচা পরীক্ষার বৈশিষ্ট্য
বাইনারি মডিউল পৃষ্ঠায় বর্ণিত rust_test
মডিউলগুলি rust_binary
মডিউল থেকে বৈশিষ্ট্যগুলিকে উত্তরাধিকারী করে।
নীচের সারণীতে সংজ্ঞায়িত বৈশিষ্ট্যগুলি গুরুত্বপূর্ণ সাধারণ বৈশিষ্ট্যগুলি ছাড়াও যা সমস্ত মডিউলে প্রযোজ্য। এগুলি হয় মরিচা পরীক্ষার মডিউলগুলির জন্য বিশেষভাবে গুরুত্বপূর্ণ, অথবা rust_test
মডিউল প্রকারের জন্য নির্দিষ্ট অনন্য আচরণ প্রদর্শন করে।
- test_harness : উন্নত ব্যবহার, ডিফল্ট থেকে সত্য।
এটিকে মিথ্যাতে সেট করুন যদি আপনার rust_test
এর নিজস্ব পরীক্ষার জোতা প্রয়োগ করে এবং আপনাকে বিল্ট-ইন রাস্ট টেস্ট হারনেস ব্যবহার করতে হবে না (অন্য কথায়, এটিকে মিথ্যাতে সেট করলে --test
পতাকা rustc-তে পাস হবে না )।
মরিচা_লাইব্রেরি এবং জং_পরীক্ষার মধ্যে নকল এড়িয়ে চলুন
আপনি যখন নেস্টেড মডিউলগুলির মাধ্যমে ইনলাইন মরিচা পরীক্ষা ব্যবহার করেন, তখন আপনার 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"],
}
এইভাবে, লাইব্রেরি এবং পরীক্ষা মডিউল সবসময় একই নির্ভরতা ব্যবহার করবে।