我实现了以下方法和单元测试:
use std::fs::File;
use std::path::Path;
use std::io::prelude::*;
fn read_file(path: &Path) {
let mut file = File::open(path).unwrap();
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
println!("{}", contents);
}
#[test]
fn test_read_file() {
let path = &Path::new("/etc/hosts");
println!("{:?}", path);
read_file(path);
}
我以这样的方式运行单元测试:
rustc --test app.rs; ./app
我也可以运行这个
cargo test
我得到一条消息,说测试通过了,但是println!永远不会显示在屏幕上。为什么不呢?
测试时,不显示标准输出。不要使用短信进行测试,而是断言!, assert_eq !,失败了!代替。Rust的单元测试系统可以理解这些信息,但不能理解文本消息。
即使出现问题,您编写的测试也会通过。让我们来看看原因:
Read_to_end的签名为
fn read_to_end(&mut self) -> IoResult<Vec<u8>>
它返回一个IoResult来指示成功或错误。这只是一个error值为IoError的Result的类型定义。如何处理错误由您决定。在本例中,我们希望任务失败,这可以通过在Result上调用unwrap来实现。
这是可行的:
let contents = File::open(&Path::new("message.txt"))
.read_to_end()
.unwrap();
不过,不应该过度使用Unwrap。
测试时,不显示标准输出。不要使用短信进行测试,而是断言!, assert_eq !,失败了!代替。Rust的单元测试系统可以理解这些信息,但不能理解文本消息。
即使出现问题,您编写的测试也会通过。让我们来看看原因:
Read_to_end的签名为
fn read_to_end(&mut self) -> IoResult<Vec<u8>>
它返回一个IoResult来指示成功或错误。这只是一个error值为IoError的Result的类型定义。如何处理错误由您决定。在本例中,我们希望任务失败,这可以通过在Result上调用unwrap来实现。
这是可行的:
let contents = File::open(&Path::new("message.txt"))
.read_to_end()
.unwrap();
不过,不应该过度使用Unwrap。