MST

星途 面试题库

面试题:Rust中单元测试的基本组织方式

请阐述在Rust中如何为一个普通函数编写单元测试?包括测试函数的定义位置、命名规则以及如何运行这些测试。假设有一个函数 `fn add(a: i32, b: i32) -> i32 { a + b }`,请为其编写单元测试。
38.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 测试函数的定义位置
    • 在Rust中,单元测试通常定义在与被测试代码相同的模块中。可以在模块内部使用 #[cfg(test)] 标注来定义测试代码块。这样,在正常编译时,测试代码不会被包含在最终的可执行文件或库中,只有在运行测试时才会被编译。
  2. 命名规则
    • 测试函数的命名一般遵循 test_ 前缀加上被测试函数名的规则,以明确表示这是一个测试函数。例如,对于 add 函数的测试函数,可以命名为 test_add
  3. 如何运行这些测试
    • 在项目根目录下,运行 cargo test 命令。Cargo会自动发现并运行所有标注了 #[test] 的函数。

以下是为 add 函数编写的单元测试示例:

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

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

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

在上述代码中:

  • #[cfg(test)] 表示这部分代码只有在测试配置下才会被编译。
  • mod tests 定义了一个名为 tests 的模块用于存放测试代码。
  • use super::*; 引入了外层模块的内容,这样在测试模块中可以访问到 add 函数。
  • #[test] 标注表明 test_add 函数是一个测试函数,assert_eq! 宏用于断言 add(2, 3) 的结果是否等于 5