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

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

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

For a live example of an on-device and on-host Rust test, view keystore2 Android.bp , or locate one in many of the crates in the external/rust/crates directory.

একটি 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 বৈশিষ্ট্যগুলি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, টেস্ট ডেভেলপমেন্ট ওয়ার্কফ্লো ডকুমেন্টেশনের সেটিংস বিভাগটি দেখুন।

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

The rust_test modules inherit properties from rust_binary modules as described on the Binary Modules page.

The properties defined in the table below are in addition to the Important common properties that apply to all modules. These are either particularly important to Rust test modules, or exhibit unique behavior specific to the rust_test module type.

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

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

মরিচা_লিবারি এবং মরিচা_স্টেস্টের মধ্যে সদৃশতা এড়িয়ে চলুন

আপনি যখন নেস্টেড মডিউলগুলির মাধ্যমে ইনলাইন মরিচা পরীক্ষাগুলি ব্যবহার করেন, আপনি আপনার Android.bp ফাইলে সদৃশটি শেষ করেন। The problem is that you have to list the dependencies twice, once for rust_library and once for 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"],
}

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

,

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

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

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

A rust_test module builds using rustc's --test flag, which creates tests out of code marked with the #[test] attribute. আরও তথ্যের জন্য, মরিচা রেফারেন্স টেস্টিং অ্যাট্রিবিউটস ডকুমেন্টেশন দেখুন।

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

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 ব্যবহার করে আহ্বান করা যেতে পারে।

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

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

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 : Advanced usage, defaults to true.

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

মরিচা_লিবারি এবং মরিচা_স্টেস্টের মধ্যে সদৃশতা এড়িয়ে চলুন

When you use inline Rust tests via nested modules, you end up with duplication in your Android.bp file. সমস্যাটি হ'ল আপনাকে একবারে 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 মডিউল হিসাবে তালিকাভুক্ত করবে। 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"],
}

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