文档测试

在文档注释中,使用 markdown 的代码块可以用来生成文档注释。具体如下:

fn main() {
/// `add_one` 将指定值加1
///
/// # Examples11
///
/// ```
/// let arg = 5;
/// let answer = world_hello::compute::add_one(arg);
///
/// assert_eq!(6, answer);
/// ```
pub fn add_one(x: i32) -> i32 {
    x + 1
}

代码注释不必标注语言类型,因为这是 rust 语言。

文档测试中还可以使用 死亡测试

/// # Panics
///
/// The function panics if the second argument is zero.
///
/// ```rust,should_panic
/// // panics on division by zero
/// world_hello::compute::div(10, 0);
/// ```

单元测试

在代码中被 #[cfg(test)] 标记的代码表明是测试代码:

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        assert_eq!(2 + 2, 4);
    }
}

死亡测试

使用 should_panic 属性可以用来进行死亡测试:

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

    #[test]
    #[should_panic]
    fn greater_than_100() {
        Guess::new(200);
    }
}

私有模块测试

一般而言,测试应当仅覆盖公有函数,但是依赖可以测试私有函数:

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

    #[test]
    fn internal() {
        assert_eq!(4, internal_adder(2, 2));
    }
}
  1. 引入父作用域以调用私有函数。

集成测试

单元测试和源码放在一起,而集成测试则单独放置在项目的 tests 文件夹下。

tests 目录下的测试文件_一般_ 以 _test 结尾,其目录下的所有测试文件都是集成测试文件:

use adder;

#[test]
fn it_adds_two() {
    assert_eq!(4, adder::add_two(2));
}
cargo 不会对 tests 目录递归查找。
Last moify: 2023-10-10 10:17:31
Build time:2025-07-18 09:41:42
Powered By asphinx