簡體   English   中英

Rust 單元測試 - 函數調用在最后掛起並且不返回

[英]Rust Unit Test - Function call hangs at the very end and does not return

我正在為我的 Rust http 服務器處理程序編寫一些單元測試。 但是當我運行其中一項測試時,它會卡在內部函數的末尾。 這是代碼的相關部分:

async fn generate(request: Request<Body>) -> Result<Response<Body>, hyper::Error> {

    let result = process_request(request).await;

    println!("This message doesn't get printed!!");
    
    let (spec, override) = match result {
        Ok((s, o)) => (s, o),
        Err(process_error) => {
            return Ok(Response::new(Body::from(format!("{}", process_error))));
        },
    };

    ...

    Ok(Response::new(Body::from(format!("{}", response))))
}
async fn process_request(request: Request<Body>) -> Result<(Spec, Option<Config>), Error> {
    let body = body::to_bytes(request.into_body()).await;
    let payload: Payload = serde_json::from_slice(&body.unwrap().to_vec()).unwrap();
    let spec_str = payload.spec.to_owned();
    ...
    
    println!("Function runs to this point and prints this message");

    Ok((spec, override))
}
#[tokio::test]
async fn test_gen() {

    let payload =  Payload {
        spec: a_spec(),
    };
        
    let payload_json = serde_json::to_string_pretty(&payload).unwrap();
    let request = Request::builder().body(Body::from(payload_json));
        
    let result = generate(request.unwrap()).await.unwrap();
    
    // Some asserts ...
}

我想知道我做錯了什么?

看起來內部函數啟動了另一個線程,因此解決方案是使用以下內容裝飾測試:

#[tokio::test(flavor = "multi_thread", worker_threads = 2)]

這解決了我的單元測試的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM