| CARGO-TEST(1) | General Commands Manual | CARGO-TEST(1) |
نام (NAME)
cargo-test - اجرای آزمونهای واحد و یکپارچهسازی بسته در پروژههای Rust
خلاصه دستور (SYNOPSIS)
cargo test [گزینهها] [نام_آزمون] [-- گزینههای_آزمون]
توضیحات (DESCRIPTION)
کامپایل و اجرای آزمونهای واحد (Unit)، یکپارچهسازی (Integration) و مستندات (Doc tests).
آرگومان فیلتر کردن آزمون TESTNAME و تمامی آرگومانهای پس از دو خط تیره (--) به باینریهای آزمون و در نتیجه به libtest (چارچوب داخلی rustc برای آزمونهای واحد و بنچمارکهای خرد) ارسال میشوند. اگر آرگومانها را هم به Cargo و هم به باینری ارسال میکنید، مواردی که پس از -- میآیند به باینری و موارد قبل از آن به Cargo ارسال میشوند. برای جزئیات درباره آرگومانهای libtest خروجی cargo test -- --help را مشاهده کنید و فصل مربوط به نحوه کارکرد آزمونها در کتاب rustc را در نشانی https://doc.rust-lang.org/rustc/tests/index.html بررسی کنید.
به عنوان مثال، این دستور آزمونهایی را که شامل foo در نام خود هستند فیلتر کرده و آنها را به صورت موازی روی ۳ ریسه (Thread) اجرا میکند:
cargo test foo -- --test-threads 3
آزمونها با گزینه --test برای rustc ساخته میشوند که با لینک کردن کد شما با libtest یک فایل اجرایی ویژه ایجاد میکند. این فایل اجرایی به صورت خودکار تمامی توابعی را که با صفت #[test] نشانهگذاری شدهاند روی چندین ریسه اجرا میکند. توابع نشانهگذاریشده با #[bench] نیز با یک تکرار اجرا میشوند تا عملکرد صحیح آنها تأیید شود.
اگر بسته شامل چندین هدف آزمون باشد، هر هدف همانطور که گفته شد به یک فایل اجرایی ویژه کامپایل شده و سپس به صورت متوالی اجرا میشود.
بستر اجرایی libtest را میتوان با تنظیم harness = false در تنظیمات مانیفست هدف غیرفعال کرد؛ در این صورت کد شما باید تابع main اختصاصی خود را برای مدیریت اجرای آزمونها ارائه دهد.
آزمونهای مستندات (Documentation tests)
آزمونهای مستندات نیز به صورت پیشفرض اجرا میشوند که مدیریت آن بر عهده rustdoc است. این ابزار نمونهکدها را از کامنتهای مستنداتی هدف کتابخانه استخراج کرده و سپس آنها را اجرا میکند.
برخلاف اهداف آزمون معمولی، هر بلوک کد با rustc در لحظه به یک فایل اجرایی doctest کامپایل میشود. این فایلهای اجرایی به صورت موازی در فرآیندهای جداگانه اجرا میشوند. کامپایل یک بلوک کد در واقع بخشی از تابع آزمون است که توسط libtest کنترل میشود، بنابراین برخی گزینهها مانند --jobs ممکن است بیاثر باشند. توجه داشته باشید که این مدل اجرای doctest تضمینشده نیست و ممکن است در آینده تغییر کند؛ از وابستگی به آن خودداری کنید.
برای اطلاعات بیشتر درباره نوشتن آزمونهای مستندات به کتاب rustdoc در نشانی https://doc.rust-lang.org/rustdoc مراجعه کنید.
دایرکتوری کاری آزمونها (Working directory of tests)
دایرکتوری کاری هنگام اجرای هر آزمون واحد و یکپارچهسازی روی دایرکتوری ریشه بستهای که آزمون به آن تعلق دارد تنظیم میشود. تنظیم دایرکتوری کاری آزمونها روی دایرکتوری ریشه بسته باعث میشود آزمونها بتوانند با استفاده از مسیرهای نسبی، بدون توجه به جایی که cargo test از آنجا اجرا شده است، به طور قابل اعتماد به فایلهای بسته دسترسی داشته باشند.
برای آزمونهای مستندات، دایرکتوری کاری هنگام فراخوانی rustdoc روی دایرکتوری ریشه فضای کاری (Workspace) تنظیم میشود و همچنین همان دایرکتوری است که rustdoc به عنوان دایرکتوری کامپایل هر آزمون مستندات استفاده میکند. دایرکتوری کاری هنگام اجرای هر آزمون مستندات روی دایرکتوری ریشه بستهای که آزمون به آن تعلق دارد تنظیم میشود و از طریق گزینه --test-run-directory در rustdoc کنترل میشود.
گزینهها (OPTIONS)
گزینههای آزمون (Test Options)
--no-run
--no-fail-fast
انتخاب بسته (Package Selection)
به صورت پیشفرض، هنگامی که هیچ گزینه انتخابی برای بسته مشخص نشده باشد، بستههای انتخابشده به فایل مانیفست انتخابشده بستگی دارند (بر اساس دایرکتوری کاری جاری اگر --manifest-path داده نشده باشد). اگر مانیفست ریشه یک فضای کاری باشد، اعضای پیشفرض فضای کاری انتخاب میشوند، در غیر این صورت تنها بسته تعریفشده توسط مانیفست انتخاب خواهد شد.
اعضای پیشفرض یک فضای کاری را میتوان با کلید workspace.default-members در مانیفست ریشه به صراحت تنظیم کرد. اگر این کلید تنظیم نشده باشد، یک فضای کاری مجازی شامل همه اعضای فضای کاری خواهد بود (معادل ارسال --workspace)، و یک فضای کاری غیرمجازی فقط شامل خود کریت (Crate) ریشه خواهد بود.
-p spec…, --package spec…
--workspace
--all
--exclude SPEC…
انتخاب هدف (Target Selection)
هنگامی که هیچ گزینهای برای انتخاب هدف مشخص نشده باشد، cargo test اهداف زیر از بستههای انتخابشده را میسازد:
رفتار پیشفرض را میتوان با تنظیم فلگ test برای هدف در تنظیمات مانیفست تغییر داد. تنظیم مثالها روی test = true مثال را به عنوان یک آزمون ساخته و اجرا میکند و تابع main مثال را با بستر libtest جایگزین میکند. اگر نمیخواهید تابع main جایگزین شود، مقدار harness = false را نیز اضافه کنید؛ در این صورت مثال همانطور که هست ساخته و اجرا میشود.
تنظیم اهداف روی test = false از آزموده شدن آنها به صورت پیشفرض جلوگیری میکند. گزینههای انتخاب هدف که یک هدف را با نام دریافت میکنند (مانند --example foo) فلگ test را نادیده گرفته و همیشه هدف دادهشده را آزمایش میکنند.
آزمونهای مستندات کتابخانهها را میتوان با تنظیم doctest = false برای کتابخانه در مانیفست غیرفعال کرد.
برای اطلاعات بیشتر در مورد تنظیمات هر هدف، به بخش پیکربندی یک هدف در نشانی https://doc.rust-lang.org/cargo/reference/cargo-targets.html#configuring-a-target مراجعه کنید.
اگر یک آزمون یکپارچهسازی یا بنچمارک برای آزمایش انتخاب شده باشد، اهداف باینری به صورت خودکار ساخته میشوند. این به آزمون یکپارچهسازی اجازه میدهد باینری را اجرا کرده تا رفتار آن را بررسی و آزمایش کند. متغیر محیطی CARGO_BIN_EXE_<name> (مشاهده در https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-crates) هنگام ساخت و اجرای آزمون یکپارچهسازی تنظیم میشود تا بتواند با استفاده از ماکروی env در https://doc.rust-lang.org/std/macro.env.html یا تابع var در https://doc.rust-lang.org/std/env/fn.var.html مکان فایل اجرایی را پیدا کند.
ارسال فلگهای انتخاب هدف، تنها اهداف مشخصشده را آزمایش میکند.
توجه داشته باشید که فلگهای --bin، --example، --test و --bench نیز از الگوهای عمومی glob یونیکس مانند *، ? و [] پشتیبانی میکنند. با این حال، برای جلوگیری از بسط تصادفی الگوهای glob توسط شل پیش از پردازش توسط Cargo، باید در اطراف هر الگوی glob از نقلقول تکی یا دوتایی استفاده کنید.
--lib
--bin name…
--bins
--example name…
--examples
--test name…
--tests
--bench name…
--benches
--all-targets
--doc
انتخاب ویژگیها (Feature Selection)
فلگهای ویژگی به شما اجازه میدهند کنترل کنید کدام ویژگیها فعال باشند. هنگامی که هیچ گزینه ویژگی مشخص نشده باشد، ویژگی default برای هر بسته انتخابشده فعال میشود.
برای جزئیات بیشتر به مستندات ویژگیها در نشانی https://doc.rust-lang.org/cargo/reference/features.html#command-line-feature-options مراجعه کنید.
-F features, --features features
--all-features
--no-default-features
گزینههای کامپایل (Compilation Options)
--target triple
مقادیر ممکن:
این مقدار همچنین میتواند با مقدار پیکربندی build.target در https://doc.rust-lang.org/cargo/reference/config.html مشخص شود.
توجه داشته باشید که مشخص کردن این فلگ باعث میشود Cargo در حالت متفاوتی اجرا شود که در آن مصنوعات هدف در یک دایرکتوری جداگانه قرار میگیرند. برای جزئیات بیشتر به مستندات حافظه موقت ساخت (build cache) در نشانی https://doc.rust-lang.org/cargo/reference/build-cache.html مراجعه کنید.
-r, --release
--profile name
--timings
یک فایل cargo-timing.html در پایان ساخت در دایرکتوری target/cargo-timings نوشته خواهد شد. اگر مایل به بررسی اجرای قبلی باشید، یک گزارش اضافی همراه با برچسب زمان در نام فایل آن نیز نوشته میشود. این گزارشها صرفاً برای مطالعه انسانی مناسب هستند و دادههای زمانبندی خواندنی توسط ماشین ارائه نمیدهند.
گزینههای خروجی (Output Options)
--target-dir directory
گزینههای نمایش (Display Options)
به صورت پیشفرض، بستر آزمون Rust خروجی حاصل از اجرای آزمون را پنهان میکند تا نتایج خوانا باقی بمانند. خروجی آزمون را میتوان با ارسال --no-capture به باینریهای آزمون بازیابی کرد (مثلاً برای اشکالزدایی):
cargo test -- --no-capture
-v, --verbose
-q, --quiet
--color when
همچنین میتواند با مقدار پیکربندی term.color در https://doc.rust-lang.org/cargo/reference/config.html مشخص شود.
--message-format fmt
گزینههای مانیفست (Manifest Options)
--manifest-path path
--ignore-rust-version
--locked
این گزینه میتواند در محیطهایی که ساخت قطعی و تکرارپذیر مورد نظر است، مانند خطوط لوله CI، استفاده شود.
--offline
توجه داشته باشید که این ممکن است به حل وابستگی متفاوتی نسبت به حالت آنلاین منجر شود. Cargo خود را به کریتهایی محدود میکند که به صورت محلی بارگیری شدهاند، حتی اگر نسخه جدیدتری همانطور که در نسخه محلی ایندکس مشخص شده است وجود داشته باشد. برای بارگیری وابستگیها قبل از آفلاین شدن، به دستور cargo-fetch(1) مراجعه کنید.
همچنین میتواند با مقدار پیکربندی net.offline در https://doc.rust-lang.org/cargo/reference/config.html مشخص شود.
--frozen
گزینههای عمومی (Common Options)
+toolchain
--config KEY=VALUE یا PATH
-C PATH
این گزینه تنها در کانال nightly در https://doc.rust-lang.org/book/appendix-07-nightly-rust.html در دسترس است و برای فعالسازی به فلگ -Z unstable-options نیاز دارد (مشاهده #10098 در https://github.com/rust-lang/cargo/issues/10098).
-h, --help
-Z flag
گزینههای متفرقه (Miscellaneous Options)
آرگومان --jobs بر ساخت فایل اجرایی آزمون تأثیر میگذارد اما بر تعداد ریسههای مورد استفاده هنگام اجرای آزمونها تأثیری ندارد. بستر آزمون Rust شامل گزینهای برای کنترل تعداد ریسههای استفادهشده است:
cargo test -j 2 -- --test-threads=2
-j N, --jobs N
--future-incompat-report
به cargo-report(1) مراجعه کنید.
اگرچه cargo test شامل کامپایل است، اما فلگ --keep-going ارائه نمیدهد. از --no-fail-fast برای اجرای تا حد امکان آزمونهای بیشتر بدون توقف در اولین شکست استفاده کنید. برای «کامپایل» تا حد امکان آزمونهای بیشتر، از --tests برای ساخت جداگانه باینریهای آزمون استفاده کنید. به عنوان مثال:
cargo build --tests --keep-going cargo test --tests --no-fail-fast
محیط (ENVIRONMENT)
برای جزئیات درباره متغیرهای محیطی که Cargo میخواند، به مرجع در نشانی https://doc.rust-lang.org/cargo/reference/environment-variables.html مراجعه کنید.
وضعیت خروج (EXIT STATUS)
مثالها (EXAMPLES)
cargo test
cargo test name_filter
cargo test --test int_test_name -- modname::test_name
همچنین ببینید (SEE ALSO)
cargo(1), cargo-bench(1), types of tests https://doc.rust-lang.org/cargo/reference/cargo-targets.html#tests, how to write tests https://doc.rust-lang.org/rustc/tests/index.html