You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:45:39