测试 #
单元测试 #
测试处理函数 #
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