2016-06-23 4 views
6

Iが生成されたファイルを配置することができる経路を画定する、次のコードを持っている:Rustにはどこにテストユーティリティ関数を入れるべきですか?

fn gen_test_dir() -> tempdir::TempDir {           
    tempdir::TempDir::new_in(Path::new("/tmp"), "filesyncer-tests").unwrap() 
} 

この機能は、tests/lib.rsで定義されたそのファイルに試験に使用し、私はまた、ユニットテストで使用したいと考えていますsrc/lib.rsにあります。

これは、ユーティリティ機能を非テストバイナリにコンパイルせずに、コードを複製せずに達成できますか?

+0

tests/lib.rs'? –

+0

@DanielFath私はこれを試して、リリースバイナリへのコンパイルを避けるために '#[test]'と注釈を付けました: "テストとして使用する関数は、署名fn()を持たなければなりません - >()" – PureW

+0

' #cfg(not(test)) 'を実行して、コードを削除します。 –

答えて

4

私は#[cfg(test)]で保護されたサブモジュールに任意の他のユーティリティと私のユニットテストを入れてください:あなたは、SRC/lib.rs` `にそのfuncionalityを移動してから`でそれを使用することはできません

#[cfg(test)] 
mod tests { // The contents could be a separate file if it helps organisation 
    // Not a test, but available to tests. 
    fn some_utility(s: String) -> u32 { 
     ... 
    } 

    #[test] 
    fn test_foo() { 
     assert_eq!(...); 
    } 
    // more tests 
} 
+0

統合テストはどうですか?私はデータベースと統合する必要がありますが、テストのためだけに依存関係を作成する必要はありません。ユーティリティの機能を再利用する必要があるまで、統合テストは私の問題に対してうまく機能します。私は行くとtestutilの木箱を作成すると思います... – weberc2

関連する問題