РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
836 of 1245 menu

Временные файлы в тестах

Временные файлы в тестах используются для проверки функциональности, связанной с файловой системой, без риска повредить реальные данные. Для создания временных файлов в 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,
    который проверяет, что тест паникует
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить