在Rust中,單元測試是通過在代碼中編寫#[test]屬性的函數來實現的。這些測試函數通常放在與它們所測試的模塊相同的文件中,文件名以_test.rs結尾。Rust的測試框架是內置的,不需要額外的依賴。
以下是一個簡單的Rust單元測試示例:
cargo new my_project --lib
cd my_project
src/lib.rs文件中,編寫一個簡單的函數和一個測試函數:// src/lib.rs
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() {
assert_eq!(add(1, 2), 3);
assert_eq!(add(-1, 1), 0);
assert_eq!(add(0, 0), 0);
}
}
在這個例子中,我們定義了一個add函數,它接受兩個i32整數并返回它們的和。然后,我們創建了一個名為tests的模塊,并使用#[cfg(test)]屬性標記它。這意味著這個模塊只會在運行測試時編譯。
在tests模塊中,我們編寫了一個名為test_add的測試函數,它使用assert_eq!宏來檢查add函數的輸出是否與預期相符。
在項目根目錄下,運行以下命令來執行測試:
cargo test
這將編譯你的項目并運行所有標記為#[test]的測試函數。如果所有測試都通過,你將看到類似以下的輸出:
running 1 test
test tests::test_add ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
如果有測試失敗,cargo test將顯示失敗的詳細信息,幫助你診斷問題。
Rust還提供了許多其他有用的宏和特性,例如#[should_panic](用于測試恐慌情況)和#[bench](用于基準測試)。更多關于Rust測試的信息,請參閱Rust官方文檔。