Rust 单元测试函数需要做什么处理吗?
报错:
代码:
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()
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
加入#[test]标签的函数,rust会将其做为测试用例。
执行测试时,每个测试函数都会放到一个独立的运行空间中当做main函数来执行,而mian函数要求返回值必须满足Termination特性(trait)。
你这里给checkname加上#[test]后,编译器将checkname做为main函数来运行测试时,发现main函数返回了String类型,而String不满足Termination特性(trait),所以会报错。正确做法是用于单元测试的函数,不要有返回值。
另外,rust中的单元测试有一些常用惯例,请参考这本书:https://kaisery.github.io/trp... 第11章内容。
也许测试应该这样用