除了外部存储(例如环境变量、文件等),我如何在测试之间共享状态?

Stainless有一个名为before_each的设置宏,我正在考虑一个类似的东西,比如shared_values,但是它的变量可以被所有测试访问,并且也可以运行一次(在测试套件的开始).

推荐答案

考试没什么特别的.它们只是在多个线程中运行的函数.因此,一种解决方案是执行与其他代码相同的操作:create a global mutable singleton:

use once_cell::sync::Lazy; // 1.5.2

static DATABASE: Lazy<String> = Lazy::new(|| format!("{} {}", "This was", "expensive"));

#[test]
fn one() {
    println!("{}", *DATABASE);
}

#[test]
fn two() {
    println!("{}", *DATABASE);
}

测试框架没有为"after"回调提供挂钩,因此没有很好的途径来清理这个资源.对于单例变量也不会调用Drop.

Rust相关问答推荐

为什么父作用域中的变量超出了子作用域

有条件默认实现

在没有引用计数或互斥锁的情况下,可以从Rust回调函数内的封闭作用域访问变量吗?

MacOS(AARCH64)上Ghidra中的二进制补丁导致进程终止

如何导出 rust 色二进制文件中的符号

通过解引用将值移出Box(以及它被脱糖到什么地方)?

定义采用更高级类型泛型的性状

无法将记录器向下转换回原始 struct

如何编写一个以一个闭包为参数的函数,该函数以另一个闭包为参数?

用 rust 蚀中的future 展望 struct 的future

我应该将哪些文件放入我的GitHub存储库

如何在AVX2中对齐/旋转256位向量?

为什么我需要 to_string 函数的参考?

如何在 Rust 中将 bson::Bson 转换为 Vec

试图理解 Rust 中的可变闭包

改变不实现克隆的 dioxus UseState struct

深度嵌套枚举的清洁匹配臂

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

您如何使用枚举反序列化字符串,其中任何其他值反序列化为新类型变体同时保留字符串?

基于名称是否存在的条件编译