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

এই পৃষ্ঠায় রাস্ট টেস্ট হারনেস ব্যবহার করে একটি rust_test মডিউল কীভাবে তৈরি করতে হয়, সে সম্পর্কে প্রাথমিক তথ্য দেওয়া হয়েছে।

একটি মৌলিক রাস্ট টেস্ট লিখুন

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

একটি rust_test মডিউল rustc-এর --test ফ্ল্যাগ ব্যবহার করে বিল্ড করা হয়, যা #[test] অ্যাট্রিবিউট দ্বারা চিহ্নিত কোড থেকে টেস্ট তৈরি করে। আরও তথ্যের জন্য, The Rust Reference Testing Attributes ডকুমেন্টেশন দেখুন।

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

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 ফাইল তৈরি করেন, তবে এতে অন্তর্ভুক্ত টেস্টগুলো presubmit tests-এর মধ্যে রান করবে এবং atest ব্যবহার করে সেগুলোকে কল করা যাবে।

আরও তথ্যের জন্য আপনি TEST_MAPPING ডকুমেন্টেশন দেখতে পারেন, কিন্তু libfoo_inline_tests উদাহরণটির ক্ষেত্রে, TreeHugger-এ আপনার টেস্ট রান চালু করতে presubmit-এ এটি যোগ করুন:

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

উল্লেখ্য যে unit_tests: এর মান false সেট করা না থাকলে rust_test_host মডিউলগুলো ডিফল্টভাবে presubmit-এ রান করে, তাই TEST_MAPPING ফাইলগুলোতে এগুলো ডিক্লেয়ার করার প্রয়োজন নেই।

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

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

বাইনারি মডিউল পৃষ্ঠায় বর্ণিত পদ্ধতি অনুসারে rust_test মডিউলগুলো rust_binary মডিউল থেকে প্রোপার্টি উত্তরাধিকারসূত্রে গ্রহণ করে।

নিচের সারণীতে সংজ্ঞায়িত বৈশিষ্ট্যগুলি সকল মডিউলের জন্য প্রযোজ্য গুরুত্বপূর্ণ সাধারণ বৈশিষ্ট্যগুলির অতিরিক্ত। এগুলি হয় রাস্ট টেস্ট মডিউলগুলির জন্য বিশেষভাবে গুরুত্বপূর্ণ, অথবা rust_test মডিউল প্রকারের জন্য নির্দিষ্ট অনন্য আচরণ প্রদর্শন করে।

  • test_harness : উন্নত ব্যবহার, ডিফল্ট মান true।

যদি আপনার rust_test নিজস্ব টেস্ট হারনেস প্রয়োগ করে এবং আপনার বিল্ট-ইন রাস্ট টেস্ট হারনেস ব্যবহার করার প্রয়োজন না হয়, তাহলে এটিকে false-এ সেট করুন (অন্য কথায়, এটিকে false-এ সেট করলে rustc-তে --test ফ্ল্যাগটি পাস হবে না )।

rust_library এবং rust_test এর মধ্যে পুনরাবৃত্তি এড়িয়ে চলুন

যখন আপনি নেস্টেড মডিউলের মাধ্যমে ইনলাইন রাস্ট টেস্ট ব্যবহার করেন, তখন আপনার 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"],
}

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