2016-08-17 43 views
1

我創建使用貨運新的二進制:如何將測試轉移到Rust貨物中的二進制文件的單獨文件中?

cargo new my_binary --bin 

my_binary/src/main.rs函數可用於測試:

fn function_from_main() { 
    println!("Test OK"); 
} 

#[test] 
fn my_test() { 
    function_from_main(); 
} 

而且cargo test -- --nocapture按預期運行測試。

將此測試轉移到單獨文件中的最簡單方法是什麼?(保留function_from_mainmy_binary/src/main.rs)?

我試圖做到這一點,但我不知道如何使my_test從一個單獨的文件調用function_from_main

回答

4

The Rust Programming Language對於學習Rust的人來說是一個很好的資源。它涵蓋了很多基本的主題,許多人花了很多時間去改進它。所有對Rust感興趣的人都應該仔細閱讀。它有一個entire chapter dedicated to testingsection devoted to tests outside of the crate。這些類型的測試非常適合作爲代碼的消費者行使代碼

如果文檔的部分包括一個介紹性的例子和描述文字:

extern crate adder; 

#[test] 
fn it_works() { 
    assert_eq!(4, adder::add_two(2)); 
} 

這類似於我們以前的測試,但略有不同。 我們 現在有一個extern crate adder頂部。這是因爲測試目錄中的測試 是完全獨立的箱子,所以我們需要 來導入我們的庫。這也是爲什麼測試是一個合適的地方,以便編寫集成式測試:它們使用類似於任何其他 消費者的庫。

請注意,該函數被稱爲adder::add_two。有關Rust模塊系統的更多詳細信息,請參閱Crates and Modules chapter


這也是常見的把單元測試,測試,更不允許訪問代碼的內部,爲test模塊中的每一個特定的文件:

fn function_from_main() { 
    println!("Test OK"); 
} 

#[cfg(test)] 
mod test { 
    use super::*; 

    #[test] 
    fn my_test() { 
     function_from_main(); 
    } 
} 

模塊可以移動到新文件,雖然這是不常見的單元測試模塊:

main.rs

fn function_from_main() { 
    println!("Test OK"); 
} 

#[cfg(test)] 
mod test; 

test.rs

use super::*; 

#[test] 
fn my_test() { 
    function_from_main(); 
} 
2

你是對的; main.rs之外無法訪問function_from_main

你需要創建一個src/lib.rs並移動你想要測試零碎的函數。然後,您將能夠使用測試模塊中的extern crate my_binary;,並將您的功能顯示在my_binary命名空間下。

相關問題