报错:
代码:
use std::fs;
#[test] //去掉这个函数将是对的
#[allow(dead_code)]
#[allow(unused_must_use)]
fn checkname() -> String {
let isempty = fs::read_dir("h:/image/PracticeBlender/")
.unwrap()
.next()
.is_none();
if isempty {
return "2".to_string();
}
fs::read_dir("h:/image/PracticeBlender/")
.unwrap()
.into_iter()
.map(|x| {
x.map(|entry| {
println!("2");
let file_name = entry.file_name();
println!("{:?}", file_name);
})
});
"1".to_string()
}
加入#[test]标签的函数,rust会将其做为测试用例。
执行测试时,每个测试函数都会放到一个独立的运行空间中当做main函数来执行,而mian函数要求返回值必须满足Termination特性(trait)。
你这里给checkname加上#[test]后,编译器将checkname做为main函数来运行测试时,发现main函数返回了String类型,而String不满足Termination特性(trait),所以会报错。正确做法是用于单元测试的函数,不要有返回值。
另外,rust中的单元测试有一些常用惯例,请参考这本书:https://kaisery.github.io/trp... 第11章内容。