linux Rust -希望测试用例env::current_dir()返回错误

fjnneemd  于 2022-12-03  发布在  Linux
关注(0)|答案(1)|浏览(127)

我正在创建一个函数,它会在某个时候检查当前目录。在env::current_dir()中,可能会返回一个错误,我想测试它的情况......但我没有找到如何做到这一点。它应该在Linux上运行。
有人有什么想法吗?
基本运动场:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=b7d8ed377d2b89521e3fd2736dae383a
操场代号:

use std::env;
 
#[allow(unused)]
fn check_current_dir() -> Result<(), &'static str> {
    if let Ok(current_dir) = env::current_dir() {
        println!("Current dir is ok: {:?}", current_dir);
        return Ok(());
    } else {
        return Err("Currentdir failed");
    }
}


#[cfg(test)]
mod check_current_dir {
    use super::*;

    #[test]
   fn current_dir_fail() {
        assert!(check_current_dir().is_ok()) //want to make it fails       
    }
}

我尝试创建一个目录,将当前目录移动到它,删除目录(但失败了),我尝试使用一个符号链接目录(但current_dir()返回Ok())。

u3r8eeie

u3r8eeie1#

current_dir在Unix上使用的getcwd联机帮助页中列出了可能的故障:

ERRORS
       EACCES Permission to read or search a component of the filename was denied.

       ENAMETOOLONG
              getwd(): The size of the null-terminated absolute pathname string exceeds PATH_MAX bytes.

       ENOENT The current working directory has been unlinked.

       ENOMEM Out of memory.

从这里我排除了EFAULTEINVALERANGE,因为Rusts std正在为您处理bufsize。因此,例如,这个删除当前目录的测试将失败:

use std::fs;

use super::*;

#[test]
fn current_dir_fail() {
    fs::create_dir("bogus").unwrap();
    std::env::set_current_dir("bogus").unwrap();
    fs::remove_dir("../bogus").unwrap();
    assert!(check_current_dir().is_ok()) //want to make it fail
}

但是,对于您当前的check_current_dir实现,这实际上是在测试std,它已经经过了很好的测试,您不需要这样做。

相关问题