2016-06-23 38 views
6

我有以下代碼定義路徑,其中生成的文件可以放置:我應該在Rust中將測試實用函數放在哪裏?

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

此函數在tests/lib.rs定義,在該文件中的試驗中使用的,我也想在單元測試使用它位於src/lib.rs

如果不將函數函數編譯到非測試二進制文件中並且沒有重複代碼,可以實現這種功能嗎?

+0

不能你說的funcionality進入'SRC/lib.rs',然後在'使用測試/ lib.rs'? –

+0

@DanielFath我試過這個並用'#[test]'註釋以避免編譯成release-binary並收到這個錯誤:「用作測試的函數必須有簽名fn() - >()」 – PureW

+0

你可以試着把' #cfg(not(test))'這會在非測試階段刪除你的代碼。 –

回答

4

我要做的就是把我的單元測試與任何其他公用事業與#[cfg(test)]保護的子模塊:

#[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

相關問題