测试 #

单元测试 #

测试处理函数 #

rust
use actix_web::{web, App, HttpResponse, Responder, test};

#[actix_web::get("/health")]
async fn health() -> impl Responder {
    HttpResponse::Ok().json(serde_json::json!({ "status": "ok" }))
}

#[actix_web::test]
async fn test_health() {
    let app = test::init_service(
        App::new().service(health)
    ).await;
    
    let req = test::TestRequest::get()
        .uri("/health")
        .to_request();
    
    let resp = test::call_service(&app, req).await;
    
    assert!(resp.status().is_success());
}

集成测试 #

测试 API #

rust
use actix_web::{web, App, HttpResponse, Responder, test};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct User {
    id: u32,
    name: String,
}

#[actix_web::get("/users/{id}")]
async fn get_user(path: web::Path<u32>) -> impl Responder {
    HttpResponse::Ok().json(User {
        id: path.into_inner(),
        name: "Test User".to_string(),
    })
}

#[actix_web::test]
async fn test_get_user() {
    let app = test::init_service(
        App::new().service(get_user)
    ).await;
    
    let req = test::TestRequest::get()
        .uri("/users/1")
        .to_request();
    
    let resp: User = test::call_and_read_body_json(&app, req).await;
    
    assert_eq!(resp.id, 1);
    assert_eq!(resp.name, "Test User");
}

POST 请求测试 #

rust
#[actix_web::test]
async fn test_create_user() {
    let app = test::init_service(
        App::new().route("/users", web::post().to(create_user))
    ).await;
    
    let req = test::TestRequest::post()
        .uri("/users")
        .set_json(&User { id: 0, name: "New User".to_string() })
        .to_request();
    
    let resp = test::call_service(&app, req).await;
    
    assert!(resp.status().is_success());
}

下一步 #

继续学习 部署,了解应用部署!

最后更新:2026-03-29