2017-01-09 21 views
4

各テストで必要な高価なものがあります。 テスト間で状態を共有する方法(環境変数、ファイルなど)を外部に保存する方法はありませんか?#[テスト] sの間で動的な状態を共有する

Stainlessbefore_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 * will * complain :) –

+1

@MatthieuM。友人の間でもう一つのメモリリークは何ですか?深刻なことに、Valgrindに意図的に1つのリークを試みているが、他の偶発的なリークについて警告を受けたい場合は、いつでも抑制を追加できます。 – Shepmaster

関連する問題