পরীক্ষা মডিউল

এই পৃষ্ঠাটি কীভাবে একটি 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"],
}

এইভাবে, লাইব্রেরি এবং পরীক্ষা মডিউল সবসময় একই নির্ভরতা ব্যবহার করবে।