اختبار Rust من الصفر: دليلك لكتابة أول اختبار دون تعقيد

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا اختبار Rust ليس مخيفًا بل ممتعًا؟

\n\n

عندما تبدأ في تعلم Rust، قد تشعر أن المترجم (Compiler) يقوم بكل العمل الشاق نيابةً عنك. فهو يتحقق من الذاكرة، يراقب الاقتراض (borrowing)، ويمنعك من ارتكاب الأخطاء. لكن حتى أقسى مترجم لا يستطيع التحقق من منطق البرنامج. وهنا يأتي دور الاختبارات.

\n\n

كثير من المبتدئين يخافون من الاختبارات. يعتقدون أنها مضيعة للوقت وتتطلب كتابة كود ممل. لكن في الحقيقة، الاختبارات هي شبكة الأمان الخاصة بك. فهي تساعدك على اكتشاف الأخطاء بسرعة، وإعادة هيكلة الكود بثقة، والنوم براحة بعد إطلاق التطبيق.

\n\n

في هذا المقال، سنشرح من أين تبدأ اختبار Rust إذا كنت مبتدئًا. لا نظرية زائدة — فقط تطبيق عملي، أمثلة حية، ونصائح مفيدة للمشاريع الحقيقية.

\n\n

ماذا تحتاج قبل البدء؟

\n\n

قبل كتابة الاختبارات، تأكد من تثبيت Rust. إذا لم يكن مثبتًا، افتح الطرفية (Terminal) ونفّذ:

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

كل ما نحتاجه موجود بالفعل في النظام البيئي لـ Rust. لا حاجة لتثبيت أطر عمل إضافية. يوفر Rust مشغل اختبارات مدمجًا قويًا يمكن تشغيله بأمر واحد.

\n\n

لننشئ مشروعًا جديدًا للتجربة:

\n\n
cargo new rust_test_guide\ncd rust_test_guide
\n\n

ممتاز! الآن لدينا مشروع نظيف سنتعلم فيه كتابة الاختبارات.

\n\n

الاختبار الأول: فهم الأساسيات بمثال

\n\n

افتح ملف src/lib.rs. افتراضيًا، هو فارغ، لكننا سنضيف إليه دالة بسيطة واختبارًا لها.

\n\n

لنكتب دالة تتحقق مما إذا كان الرقم زوجيًا:

\n\n
pub fn is_even(num: i32) -> bool {\n    num % 2 == 0\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_is_even() {\n        assert_eq!(is_even(4), true);\n        assert_eq!(is_even(7), false);\n    }\n}
\n\n

لنحلل الكود جزءًا جزءًا:

\n\n
    \n
  • #[cfg(test)] — هذا الوسم يخبر المترجم: "قم بتجميع هذه الوحدة فقط عند تشغيل الاختبارات". لن يتم تضمينها في البناء النهائي.
  • \n
  • mod tests — ننشئ وحدة للاختبارات. هذه ممارسة قياسية.
  • \n
  • use super::*; — نستورد كل ما هو مُعلن أعلاه، لنتمكن من رؤية الدالة is_even.
  • \n
  • #[test] — علامة تحول الدالة العادية إلى اختبار.
  • \n
  • assert_eq! — ماكرو يتحقق من تساوي قيمتين. إذا لم تكونا متساويتين، يفشل الاختبار.
  • \n
\n\n

شغّل الاختبار بالأمر:

\n\n
cargo test
\n\n

إذا تم كل شيء بشكل صحيح، سترى مخرجات خضراء:

\n\n
running 1 test\ntest tests::test_is_even ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
\n\n

أهنئك، لقد كتبت أول اختبار لك في Rust! الآن دعنا نفهم كيفية كتابة تحققات أكثر فائدة.

\n\n

الماكروهات الأساسية للاختبار

\n\n

في الاختبارات، ستستخدم باستمرار ثلاثة ماكروهات. احفظها:

\n\n
    \n
  • assert!(expression) — يتحقق من أن التعبير صحيح. إذا كان خاطئًا، يفشل الاختبار.
  • \n
  • assert_eq!(left, right) — يتحقق من تساوي قيمتين. مفيد لمقارنة النتائج.
  • \n
  • assert_ne!(left, right) — يتحقق من أن القيمتين غير متساويتين.
  • \n
\n\n

مثال على استخدام الماكروهات الثلاثة:

\n\n
pub fn add_two(x: i32) -> i32 {\n    x + 2\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_add_two() {\n        assert!(add_two(3) == 5);\n        assert_eq!(add_two(0), 2);\n        assert_ne!(add_two(10), 13);\n    }\n}
\n\n

لاحظ أن assert! يقبل تعبيرًا منطقيًا (boolean)، بينما

المدونات

توصيات الكتب