我有一个Rust应用程序(一个简单的解释器),在环境可用之前需要一些设置(初始化repo).

我知道Rust以多线程的方式运行其测试(通过cargo test),所以我需要在任何测试运行之前初始化repo.我每次运行只需要做一次,而不是在每次测试之前.

在Java的JUnit中,这将通过@BeforeClass(或JUnit5中的@BeforeAll)方法完成.我怎么能在铁 rust 上得到同样的东西?

推荐答案

没有任何内置功能可以做到这一点,但这应该会有所帮助(您需要在每次测试开始时拨打initialize()):

use std::sync::Once;

static INIT: Once = Once::new();

pub fn initialize() {
    INIT.call_once(|| {
        // initialization code here
    });
}

Rust相关问答推荐

什么是谓词的简短和简洁类型

在Rust中,有没有一种方法让我定义两个 struct ,其中两个都遵循标准 struct ?

如何在Tauri中将变量从后端传递到前端

为什么实例方法可以像Rust中的静态方法一样被调用?

为昂贵的for循环制作筛子

铁 rust ,我的模块介绍突然遇到了一个问题

如何实现Serde::Ser::Error的调试

Rust:为什么 &str 不使用 Into

使用启用优化的 alloc 会导致非法指令崩溃

仅发布工作区的二进制 crate

如何限制 GtkColumnView 行数

为什么带有生命周期指定的方法不能被调用两次?

使用自定义 struct 收集 Vec

火箭整流罩、tokio-scheduler 和 cron 的生命周期问题

以下打印数组每个元素的 Rust 代码有什么问题?

为什么这个值在上次使用后没有下降?

BigUint 二进制补码

编写 TOML 文件以反序列化为 struct 中的枚举

如何将 u8 切片复制到 u32 切片中?

令人困惑的错误消息? (解包运算符)