2017-01-09 148 views
4

每個測試都需要一個昂貴的東西, 如何在測試之間共享狀態,缺少外部存儲(例如環境變量,文件等)?在#[test]之間共享動態狀態

Stainless有一個名爲before_each的建立宏觀的事情,我在考慮類似的事情,說shared_values,但其變量將所有的測試訪問,這也將一次跑(在測試開始套房)。

+0

對我來說,我想運行一些基於web的API的測試,並且我需要獲得每個測試使用的登錄令牌(這反過來將被每個API調用使用)。 – Tshepang

回答

4

測試沒有什麼特別之處。它們是在多個線程中運行的「正義」函數。因此,一種解決方案是你在其他代碼將同樣的事情: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