MST

星途 面试题库

面试题:Rust单元测试中的断言使用

在Rust中,编写一个简单函数`add`,接受两个整数参数并返回它们的和。然后编写对应的单元测试,使用至少两种不同的断言宏来验证函数的正确性。请说明常用断言宏的使用场景和注意事项。
41.0万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义add函数
fn add(a: i32, b: i32) -> i32 {
    a + b
}

// 单元测试
#[cfg(test)]
mod tests {
    use super::add;

    #[test]
    fn test_add() {
        // 使用assert_eq!宏
        assert_eq!(add(2, 3), 5);
        // 使用assert!(condition)宏
        let result = add(1, 4);
        assert!(result == 5);
    }
}

常用断言宏的使用场景和注意事项

  1. assert!(condition)

    • 使用场景:用于验证一个布尔条件是否为true。当条件为false时,测试失败。适用于简单的条件判断,例如验证某个函数返回值是否满足某个条件。
    • 注意事项:如果条件比较复杂,可能需要提前计算并将结果存储在变量中,使断言更易读。同时,要确保条件本身逻辑正确,否则可能导致误判。
  2. assert_eq!(left, right)

    • 使用场景:用于比较两个值是否相等。广泛应用于验证函数返回值与预期值是否相等的场景。
    • 注意事项:要保证比较的两个值类型相同,否则会编译错误。如果比较的是自定义类型,该类型需要实现PartialEq trait。
  3. assert_ne!(left, right)

    • 使用场景:与assert_eq!相反,用于验证两个值是否不相等。
    • 注意事项:同样要保证比较的两个值类型相同,并且自定义类型需实现PartialEq trait。
  4. assert_matches!(value, pattern)

    • 使用场景:用于模式匹配验证。例如,验证一个枚举变量是否为某个变体,或验证一个解构的元组是否符合特定模式。
    • 注意事项:模式匹配语法要正确,否则会编译错误。需要熟悉Rust的模式匹配规则,以确保断言准确。