2016-08-17 48 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命名空间下。

相关问题