0Pricing
Learn Rust Coding · درس

اختبارات الوحدة

سمة test

اختبارات الوحدة درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

الاختبار في Rust

تتضمن Rust اختبارات مضمّنة، ولا تحتاج إلى إطار عمل خارجي. والاختبارات دوال عادية موضّحة بالسمة #[test]، ويشغّلها cargo test.

اختباركم الأول

لا تقبل دالة الاختبار أي وسائط وتستخدم التأكيدات. فإذا عادت بشكل طبيعي نجحت، وإذا أطلقت panic فشلت.

fn add(a: i32, b: i32) -> i32 {
    a + b
}

#[test]
fn it_adds() {
    assert_eq!(add(2, 3), 5);
}

fn main() {
    println!("{}", add(2, 3));
}

وحدات ماكرو التأكيد

التأكيدات القياسية هي:

  • assert!(cond) — يفشل إذا كان الشرط خاطئًا
  • assert_eq!(a, b) — يفشل إذا لم تتساوَ القيمتان
  • assert_ne!(a, b) — يفشل إذا تساوت القيمتان
fn main() {
    let x = 4;
    assert!(x > 0);
    assert_eq!(x, 4);
    assert_ne!(x, 5);
    println!("All assertions passed");
}

وحدة tests

وفقًا للعرف، توجد اختبارات الوحدة في وحدة موضّحة بالسمة #[cfg(test)] كي تُترجم فقط أثناء الاختبار.

fn square(n: i32) -> i32 {
    n * n
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn squares_correctly() {
        assert_eq!(square(5), 25);
    }
}

fn main() {
    println!("{}", square(5));
}

use super::*

نظرًا إلى أن وحدة الاختبار متداخلة، تُدخل use super::* عناصر الوحدة الأصلية (الدوال التي تريدون اختبارها) إلى النطاق.

تشغيل الاختبارات

يترجم cargo test كل الاختبارات ويشغّلها. ويعرض عدد الاختبارات التي نجحت أو فشلت أو تم تجاهلها.

cargo test

اختبار حالات الذعر

استخدم #[should_panic] للتأكد من أن الدالة تتسبب في حالة ذعر عند تحقق شروط معينة.

fn checked_div(a: i32, b: i32) -> i32 {
    if b == 0 {
        panic!("division by zero");
    }
    a / b
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    #[should_panic(expected = "division by zero")]
    fn panics_on_zero() {
        checked_div(10, 0);
    }
}

fn main() {}

الاختبارات التي تُرجع Result

يمكن للاختبار إرجاع Result، مما يتيح لكم استخدام العامل ?. ويؤدي إرجاع Err إلى فشل الاختبار.

fn parse(s: &str) -> Result<i32, std::num::ParseIntError> {
    s.parse::<i32>()
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn parses_number() -> Result<(), std::num::ParseIntError> {
        let n = parse("42")?;
        assert_eq!(n, 42);
        Ok(())
    }
}

fn main() {}

تجاهل الاختبارات

ضع علامة #[ignore] على الاختبارات البطيئة أو الخاصة ببيئة معينة. وشغّلها صراحةً باستخدام cargo test -- --ignored.

#[test]
#[ignore]
fn expensive_test() {
    // long-running work
}

fn main() {}

خيارات مفيدة للاختبارات

خيارات مفيدة عند تشغيل الاختبارات:

  • cargo test name — تشغيل الاختبارات التي يطابق اسمها الاسم المحدد
  • cargo test -- --nocapture — عرض مخرجات println
  • cargo test -- --test-threads=1 — تشغيل الاختبارات تسلسليًا

اختبار الدوال الخاصة

بما أن وحدة الاختبار متداخلة داخل الملف نفسه، يمكنها الوصول إلى الدوال الخاصة — وهذا أمر لا تستطيع اختبارات التكامل فعله. وهذه ميزة أساسية لاختبارات الوحدات.

fn internal(n: i32) -> i32 {
    n + 1
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn tests_private() {
        assert_eq!(internal(4), 5);
    }
}

fn main() {
    println!("{}", internal(4));
}

تحقق سريع

ما السمة التي تحدد الدالة باعتبارها اختبارًا ينبغي لـ Cargo تشغيله؟

مراجعة

لقد تعلمتم الاختبار المدمج في Rust:

  • #[test] تحدد دوال الاختبار
  • دوال التحقق: assert! وassert_eq! وassert_ne!
  • توجد الاختبارات في وحدة #[cfg(test)] مع use super::*
  • تتعامل الاختبارات التي تستخدم #[should_panic] والاختبارات التي تُرجع Result مع الأخطاء
  • يشغّل cargo test جميع الاختبارات

الأسئلة الشائعة

هل درس «اختبارات الوحدة» مجاني؟

نعم — نص درس «اختبارات الوحدة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

ماذا ستتعلم في «اختبارات الوحدة»؟

سمة test تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟

لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «اختبارات الوحدة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟

نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. اختبارات الوحدة
  2. اختبارات التكامل
  3. تعليقات التوثيق
  4. اختبارات التوثيق
← العودة إلى Learn Rust Coding