2016-08-17 2 views
1

私は貨物を使用して新しいバイナリを作成:my_binary/src/main.rsテストをRust's Cargoのバイナリファイルに別のファイルに移動するにはどうすればよいですか?

cargo new my_binary --bin 

機能は、テストのために使用することができます:予想通り

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_testfunction_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を持つようになりました。これは、testsディレクトリの というテストが完全に別のクレートなので、ライブラリをインポートするには が必要です。これはまた、テストが インテグレーションスタイルのテストを書くのに適した場所である理由でもあります。彼らは他のようなライブラリを使用しています( )。

この関数は、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

そうですね。 function_from_mainmain.rsの外部にアクセスできません。

src/lib.rsを作成し、テストする機能を少しずつ移動する必要があります。次に、テストモジュールからextern crate my_binary;を使用して、my_binary名前空間の下に関数を表示させることができます。

関連する問題