gpt4 book ai didi

使用异步函数的 Rust 文档测试 #[tokio-test]

转载 作者:行者123 更新时间:2023-12-03 11:26:04 24 4
gpt4 key购买 nike

好像不能用#[tokio-test]用于在 Rust 文档测试中测试异步函数?
现在我必须编写一个异步主函数并用 #[tokio-main] 标记它并调用test_fn().await在其中让一些异步函数在 cargo test --doc 期间运行.
是否有其他更好的方法可以让文档测试像普通测试功能一样运行,例如 #[tokio-test] ?如果标签 #[tokio-test]可以显示在文档中,因此用户可以复制文档并将其直接用作项目中的测试。 (这可能可以像 ##[tokio-test] 一样完成?)

最佳答案

文档测试自动将代码块包装在同步 fn main() { … } 中. .await ing 需要异步运行时。你不能.await没有产生某种运行时。您可以为每个文档测试生成一个常规的多线程运行时:

/// ```rust
/// #[tokio::main]
/// async fn main() {
/// let len = async { "aaaa".len() }.await;
/// assert_eq!(len, 4);
/// }
/// ```
为每个文档测试生成一个运行时可能不是最好的主意。更好的方法是使用 tokio_test::block_on 它使用测试本地运行时(类似于 #[tokio-test] )来阻止提供的 future :
/// ```rust
/// let len = tokio_test::block_on( async { "aaaa".len() } );
/// assert_eq!(len, 4);
/// ```
要减少样板,您可以为 block_on 创建一个宏:
macro_rules! bo {
($e:expr) => {
tokio_test::block_on($e)
};
}
并像这样使用它:
/// ```rust
/// let len = async { "aaaa".len() };
/// assert_eq!(bo!(len), 4)
/// ```

关于使用异步函数的 Rust 文档测试 #[tokio-test],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64568390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com