• 测试
    • 参见:

    测试

    函数可以通过这些属性(attribute) 进行测试:

    • #[test] 将一个函数标记为一个单元测试。该函数不能接受参数且返回空。
    • #[should_panic] 将一个函数标记为 panic 测试。
    1. // 当且仅当测试套件没有运行时,才条件编译 `main` 函数。
    2. #[cfg(not(test))]
    3. fn main() {
    4. println!("If you see this, the tests were not compiled nor ran!");
    5. }
    6. // 当且仅当测试套件运行时,才条件编译 `test` 模块。
    7. #[cfg(test)]
    8. mod test {
    9. // 需要一个辅助函数 `distance_test`。
    10. fn distance(a: (f32, f32), b: (f32, f32)) -> f32 {
    11. (
    12. (b.0 - a.0).powi(2) +
    13. (b.1 - a.1).powi(2)
    14. ).sqrt()
    15. }
    16. #[test]
    17. fn distance_test() {
    18. assert!(distance((0f32, 0f32), (1f32, 1f32)) == (2f32).sqrt());
    19. }
    20. #[test]
    21. #[should_panic]
    22. fn failing_test() {
    23. assert!(1i32 == 2i32);
    24. }
    25. }

    通过 cargo testrustc --test 运行测试。

    1. $ rustc --test unit_test.rs
    2. $ ./unit_test
    3. running 2 tests
    4. test test::distance_test ... ok
    5. test test::failing_test ... ok
    6. test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured

    --test 没有包含进来,则会出现这样的情况:

    1. $ rustc unit_test.rs
    2. $ ./unit_test
    3. If you see this, the tests were not compiled nor ran!

    参见:

    属性, 条件编译, 和 mod.