测试策略

单元测试

直接测试 Handler,无需启动 HTTP 服务器:

#[tokio::test]
async fn test_create_user_success() {
    let handler = CreateUserHandler { repo: Arc::new(MockRepo::new()) };
    let result = handler.handle(CreateUserRequest {
        name: "Alice".into(),
        email: "alice@test.com".into(),
    }).await;
    assert!(result.is_ok());
}

集成测试

框架在 `crates/host/tests/` 提供完整集成测试范例:

cargo test -p rust-webx-host

测试覆盖:路由匹配、中间件管道、认证授权、缓存、CORS 等。

应用级集成测试

// tests/api_test.rs
use webx::*;

#[tokio::test]
async fn test_hello_endpoint() {
    let host = Host::builder().build();
    // 使用 test client 发送请求并断言响应
}

测试金字塔

        /  E2E  \          少量:完整用户流程
       / 集成测试 \         中等:API 端点 + 中间件
      /  单元测试   \       大量:Handler + Service 逻辑

Mock 策略

| 依赖 | Mock 方式 | |------|----------| | 数据库 | Mock Repository / 内存实现 | | 外部 API | trait + Mock 实现 | | IMediator | 直接调用 Handler 或 Mock Mediator | | IDistributedCache | MemoryCache |

小结

Handler 的纯函数式设计使单元测试天然友好;框架集成测试可作为参考模板。

下一章:[扩展与自定义封装](../13-extensibility/INDEX.md)