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

এই পৃষ্ঠাটি কীভাবে একটি rust_test মডিউল তৈরি করতে হয় যা মরিচা পরীক্ষার জোতা ব্যবহার করে সে সম্পর্কে প্রাথমিক তথ্য সরবরাহ করে।

একটি মৌলিক মরিচা পরীক্ষা লিখুন

একটি অন-ডিভাইস এবং অন-হোস্ট মরিচা পরীক্ষার একটি লাইভ উদাহরণের জন্য, keystore2 Android.bp দেখুন, বা external/rust/crates ডিরেক্টরিতে অনেকগুলি ক্রেটে একটি সনাক্ত করুন৷

একটি rust_test মডিউল rustc-এর --test পতাকা ব্যবহার করে তৈরি করা হয়, যা #[test] অ্যাট্রিবিউট দিয়ে চিহ্নিত কোডের বাইরে পরীক্ষা তৈরি করে। For more information, see the The Rust Reference Testing Attributes documentation.

নিম্নরূপ একটি পরীক্ষা মডিউল সংজ্ঞায়িত করুন:

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 ফাইলে পরীক্ষার একটি তালিকা রয়েছে৷ Although it's not a requirement, if you do create a TEST_MAPPING file, the tests you include in it will run in presubmit tests, and can be invoked using atest .

You can reference the TEST_MAPPING documentation for more information, but for the libfoo_inline_tests example, add this to presubmit to enable your test runs on TreeHugger:

{
  "presubmit": [
    {
      "name": "libfoo_inline_tests",
    },
  ]
}

Note that rust_test_host modules run by default in presubmit unless unit_tests: is set to false , so you don't need to declare these in TEST_MAPPING files.

auto_gen_config এবং test_suites বৈশিষ্ট্যগুলি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, টেস্ট ডেভেলপমেন্ট ওয়ার্কফ্লো ডকুমেন্টেশনের সেটিংস বিভাগটি দেখুন।

উল্লেখযোগ্য মরিচা পরীক্ষার বৈশিষ্ট্য

বাইনারি মডিউল পৃষ্ঠায় বর্ণিত rust_test মডিউলগুলি rust_binary মডিউল থেকে বৈশিষ্ট্যগুলিকে উত্তরাধিকারী করে।

নীচের সারণীতে সংজ্ঞায়িত বৈশিষ্ট্যগুলি গুরুত্বপূর্ণ সাধারণ বৈশিষ্ট্যগুলি ছাড়াও যা সমস্ত মডিউলে প্রযোজ্য। These are either particularly important to Rust test modules, or exhibit unique behavior specific to the rust_test module type.

  • test_harness : উন্নত ব্যবহার, ডিফল্ট থেকে সত্য।

Set this to false if your rust_test implements its own test harness and you don't need to use the built-in Rust test harness (in other words, setting this to false won't pass the --test flag to 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",
    ],
}

Each rust_test module will end up listing the same dependencies as the corresponding rust_library module. To ensure consistency between the modules, you can list the dependencies just once in a rust_defaults module:

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"],
}

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