Rust:
כתיבת בדיקות
איך לעשות:
מסגרת הבדיקות המובנית בRust תומכת בבדיקות יחידה, אינטגרציה, ותיעוד ללא הצורך בספריות חיצוניות. הבדיקות מסומנות באמצעות #[test]
, וכל פונקציה שמסומנת כך מתורגמת כבדיקה.
כתיבת בדיקת יחידה:
מקום בדיקות יחידה במודול שהן בודקות באמצעות תת-מודול tests
שמסומן ב #[cfg(test)]
כדי לוודא שהן מתורגמות רק בעת בדיקה.
// lib.rs או main.rs
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_adds_two() {
assert_eq!(add(2, 2), 4);
}
}
ביצוע הבדיקות:
$ cargo test
פלט:
Compiling your_package_name v0.1.0 (/path/to/your_package)
Finished test [unoptimized + debuginfo] target(s) in 0.00 secs
Running unittests src/lib.rs (or src/main.rs)
running 1 test
test tests::it_adds_two ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
כתיבת בדיקות אינטגרציה:
בדיקות אינטגרציה נמצאות בתיקיית tests ברמה העליונה של הפרויקט, לצד src
. כל קובץ .rs
בtests
מתורגם כקרייט נפרד שלו.
// tests/integration_test.rs
use your_package_name;
#[test]
fn it_adds_two() {
assert_eq!(your_package_name::add(2, 2), 4);
}
בדיקה עם ספריות שלישיות פופולריות:
לקבלת יכולת בדיקה רחבה יותר, ספריית הproptest
יכולה לייצר מגוון רחב של קלטים לבדיקת פונקציות.
הוסף proptest
כתלות בפיתוח בCargo.toml
:
[dev-dependencies]
proptest = "1.0"
השתמש בproptest
להרצת אותה הבדיקה עם קלטים רבים שנוצרים אוטומטית:
// בתוך tests/integration_test.rs או במודול's #[cfg(test)]
use proptest::prelude::*;
proptest! {
#[test]
fn doesnt_crash(a: i32, b:i32) {
your_package_name::add(a, b);
}
}
זה בודק ש add
לא מתמוטט למגוון רחב של קלטים מסוג i32
.