// 定义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);
}
}
常用断言宏的使用场景和注意事项
-
assert!(condition)
- 使用场景:用于验证一个布尔条件是否为
true
。当条件为false
时,测试失败。适用于简单的条件判断,例如验证某个函数返回值是否满足某个条件。
- 注意事项:如果条件比较复杂,可能需要提前计算并将结果存储在变量中,使断言更易读。同时,要确保条件本身逻辑正确,否则可能导致误判。
-
assert_eq!(left, right)
- 使用场景:用于比较两个值是否相等。广泛应用于验证函数返回值与预期值是否相等的场景。
- 注意事项:要保证比较的两个值类型相同,否则会编译错误。如果比较的是自定义类型,该类型需要实现
PartialEq
trait。
-
assert_ne!(left, right)
- 使用场景:与
assert_eq!
相反,用于验证两个值是否不相等。
- 注意事项:同样要保证比较的两个值类型相同,并且自定义类型需实现
PartialEq
trait。
-
assert_matches!(value, pattern)
- 使用场景:用于模式匹配验证。例如,验证一个枚举变量是否为某个变体,或验证一个解构的元组是否符合特定模式。
- 注意事项:模式匹配语法要正确,否则会编译错误。需要熟悉Rust的模式匹配规则,以确保断言准确。