Rust 单元测试函数需要做什么处理吗?

发布于 2022-09-13 00:56:16 字数 713 浏览 19 评论 0

报错:

image.png

代码:


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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海之角 2022-09-20 00:56:17

加入#[test]标签的函数,rust会将其做为测试用例。

执行测试时,每个测试函数都会放到一个独立的运行空间中当做main函数来执行,而mian函数要求返回值必须满足Termination特性(trait)。

你这里给checkname加上#[test]后,编译器将checkname做为main函数来运行测试时,发现main函数返回了String类型,而String不满足Termination特性(trait),所以会报错。正确做法是用于单元测试的函数,不要有返回值。

另外,rust中的单元测试有一些常用惯例,请参考这本书:https://kaisery.github.io/trp... 第11章内容。

月寒剑心 2022-09-20 00:56:17

也许测试应该这样用

#[cfg(test)]
mod tests {
    use std::fs;

    #[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]
    fn test_checkname() {
        assert_eq!("1".to_string(), checkname());
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文