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

如何对基于Tonic框架的Rust gRPC应用编写集成测试

Rust tonic 框架 gRPC 集成测试实现方案

前置依赖调整

首先在你的Cargo.toml中补充测试所需的依赖配置:

[package]
name = "merchant-app" # 此处为你的项目名,后续导入会用到
version = "0.1.0"
edition = "2021"

[dependencies]
tonic = "0.9"
prost = "0.12"
tokio = { version = "1.0", features = ["full"] }
async-trait = "0.1"

[build-dependencies]
tonic-build = "0.9"

[dev-dependencies]
tonic = "0.9"
tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }

注意:你贴出的代码存在文件内容错位问题,merchant.rs里放了启动入口的main函数,main.rs里反而放了服务实现,建议先把两个文件的内容交换,符合常规Rust项目结构,避免后续导入路径报错。


merchant_test.rs 完整代码

// 导入主项目的类型,merchant_app替换为你Cargo.toml中package.name的取值
use merchant_app::merchant::merchant_service_client::MerchantServiceClient;
use merchant_app::merchant::MerchantServiceImpl;
use merchant_app::merchant::Merchant;
use tonic::transport::Server;

#[tokio::test]
async fn test_add_merchant() {
    // 绑定随机端口,避免多测试并行时端口冲突
    let addr = "127.0.0.1:0".parse().unwrap();
    let merchant_service = MerchantServiceImpl::default();

    // 把服务放到后台异步任务运行,不阻塞测试线程
    tokio::spawn(async move {
        Server::builder()
            .add_service(
                merchant_app::merchant::merchant_service_server::MerchantServiceServer::new(merchant_service)
            )
            .serve(addr)
            .await
            .unwrap();
    });

    // 等待服务启动完成,也可以自行实现循环重试连接逻辑替代固定休眠,稳定性更高
    tokio::time::sleep(tokio::time::Duration::from_millis(100)).await;

    // 初始化gRPC客户端
    let mut client = MerchantServiceClient::connect(format!("http://{}", addr))
        .await
        .unwrap();

    // 构造请求调用接口
    let request = tonic::Request::new(Merchant {
        name: "test_merchant".to_string(),
    });

    let response = client.add_merchant(request).await.unwrap();
    let response_merchant = response.into_inner();

    // 校验返回值,和你当前实现的固定返回"name"逻辑匹配
    assert_eq!(response_merchant.name, "name".to_string());

    // 后续如果调整实现为返回请求传入的name,可替换为下面的断言
    // assert_eq!(response_merchant.name, "test_merchant".to_string());
}

执行测试

直接运行cargo test即可执行该集成测试。

内容的提问来源于stack exchange,提问作者user1048282

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:36:03