如何在Rust单元测试中创建setup函数复用可变User对象?
Rust单元测试中提取Setup函数减少重复代码
需求背景
你正在编写Rust单元测试,现有User结构体及其读写方法的测试代码,希望通过提取setup()函数生成固定的User实例(User::new(String::from("Bob"), 20, 150.23)),避免在每个测试用例中重复创建对象的代码。
实现方案
Rust没有内置的测试前置钩子,但可以通过自定义辅助函数实现类似setup的效果,每个测试独立调用该函数以保证测试隔离。
1. 添加Setup辅助函数
在你的代码中添加一个返回User实例的函数:
// 生成测试用的基础User实例 fn setup() -> User { User::new(String::from("Bob"), 20, 150.23) }
2. 修改测试用例
在测试中调用setup(),根据需要将实例绑定为可变或不可变变量:
#[test] fn test_user_get_name() { let user = setup(); assert_eq!(user.get_name(), "Bob") } #[test] fn test_user_set_name() { let mut user = setup(); user.set_name("Jane".to_string()); assert_eq!(user.get_name(), "Jane") } #[test] fn test_user_get_age() { let user = setup(); assert_eq!(user.get_age(), 20) } #[test] fn test_user_set_age() { let mut user = setup(); user.set_age(25); assert_eq!(user.get_age(), 25) } #[test] fn test_user_get_weight() { let user = setup(); assert_eq!(user.get_weight(), 150.23) } #[test] fn test_user_set_weight() { let mut user = setup(); user.set_weight(160.8); assert_eq!(user.get_weight(), 160.8) }
验证测试
修改后依然可以用原命令运行测试,确保全部通过:
rustc --test health_stats.rs --verbose -o health_stats_test ./health_stats_test
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

