在#[test]之间共享动态状态

在#[test]之间共享动态状态

问题描述:

每个测试都需要一个昂贵的东西, 如何在测试之间共享状态,缺少外部存储(例如环境变量,文件等)?在#[test]之间共享动态状态

Stainless有一个名为before_each的建立宏观的事情,我在考虑类似的事情,说shared_values,但其变量将所有的测试访问,这也将一次跑(在测试开始套房)。

+0

对我来说,我想运行一些基于web的API的测试,并且我需要获得每个测试使用的登录令牌(这反过来将被每个API调用使用)。 – Tshepang

测试没有什么特别之处。它们是在多个线程中运行的“正义”函数。因此,一种解决方案是你在其他代码将同样的事情:create a global mutable singleton

#[macro_use] 
extern crate lazy_static; 

lazy_static! { 
    static ref DATABASE: String = { 
     format!("{}{}", "This was", " expensive") 
    }; 
} 

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

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

测试框架没有提供挂钩的“之后”的回调,所以没有很好的途径来清理这些资源。我不相信Drop也被称为lazy_static变量。

+0

注意:我确认'Drop'没有为'lazy_static'变量调用; valgrind *会*抱怨:) –

+1

@MatthieuM。朋友之间还有多少内存泄漏,真的吗?请注意,如果您故意尝试泄漏一件事物,但仍想警告其他意外泄漏,您可以随时向Valgrind添加一次压制。 – Shepmaster