如何为Actix Web请求处理器测试Mock/创建ReqData?
Actix-web 测试中传入
web::ReqData 的方法 web::ReqData 本身提供了 new 构造函数,测试时可以直接用它包裹测试数据,和构造 web::Data 的方式类似,直接传入处理器即可。
修改后的测试代码示例:
pub async fn handler( some_data: web::Data<SomeDataType>, req_data: web::ReqData<RequestDataType> ) -> HttpResponse { // 业务逻辑代码 } #[actix_rt::test] async fn test_fn() { // 初始化测试用的 SomeDataType 实例 let test_some_data = web::Data::new(SomeDataType { // 填充测试数据 }); // 初始化测试用的 RequestDataType 实例,并用 ReqData 包裹 let test_req_data = web::ReqData::new(RequestDataType { // 填充测试数据 }); let resp = handler(test_some_data, test_req_data).await; assert_eq!(resp.status(), StatusCode::OK); }
注意事项
ReqData要求内部数据具备'static生命周期,所以测试数据需要满足这个条件——可以使用静态常量,或者堆分配的类型(比如Box包裹、本身是'static的结构体)。- 如果你的
RequestDataType实现了Clone,也可以通过ReqData::clone复制已有实例,但测试场景下直接构造新实例更直观。
内容的提问来源于stack exchange,提问作者Marcus Ruddick
相关产品推荐
相关产品推荐

