Временные файлы в тестах
Временные файлы в тестах используются для проверки функциональности,
связанной с файловой системой, без риска повредить реальные данные.
Для создания временных файлов в Rust обычно применяется крейт
tempfile, предоставляющий тип NamedTempFile.
При создании временного файла возвращается объект, который
автоматически удаляет файл при выходе из области видимости.
Параметром метод new не принимает аргументов и создаёт
уникальный временный файл в системной временной директории.
Синтаксис
use tempfile::NamedTempFile;
let file = NamedTempFile::new().unwrap();
Пример
Давайте создадим временный файл, запишем в него строку
"abcde" и прочитаем содержимое обратно:
use std::io::{Read, Write};
use tempfile::NamedTempFile;
fn main()
{
let mut file = NamedTempFile::new().unwrap();
file.write_all(b"abcde").unwrap();
file.flush().unwrap();
let mut contents = String::new();
file.reopen().unwrap().read_to_string(&mut contents).unwrap();
println!("{}", contents);
}
Результат выполнения кода:
"abcde"
Пример
Давайте проверим, что временный файл автоматически удаляется после завершения работы с ним:
use tempfile::NamedTempFile;
fn main()
{
let path;
{
let file = NamedTempFile::new().unwrap();
path = file.path().to_path_buf();
println!("{}", path.exists());
}
println!("{}", path.exists());
}
Результат выполнения кода:
true
false
Пример
Давайте используем временный файл внутри теста для проверки функции, работающей с файлами:
use std::io::Write;
use tempfile::NamedTempFile;
fn count_bytes(path: &std::path::Path) -> u64
{
std::fs::metadata(path).unwrap().len()
}
fn main()
{
let mut file = NamedTempFile::new().unwrap();
file.write_all(b"12345").unwrap();
file.flush().unwrap();
let res = count_bytes(file.path());
println!("{}", res);
}
Результат выполнения кода:
5
Смотрите также
-
атрибут
cfg(test),
который помечает модуль с тестами -
макрос
assert!,
который проверяет истинность условия в тестах -
макрос
assert_eq!,
который проверяет равенство двух значений -
атрибут
should_panic,
который проверяет, что тест паникует