Создать std :: fileystem :: diefory_entry без поддержки файлов для тестированияC++

Программы на C++. Форум разработчиков
Anonymous
Создать std :: fileystem :: diefory_entry без поддержки файлов для тестирования

Сообщение Anonymous »

У меня есть код итерации по файлам с использованием std :: fileystem . Я использую инъекцию зависимостей, чтобы высмеивать логику diefory_iterator , но у меня возникают проблемы с созданием высмеиваемого Directory_Entry , что не позволяет устанавливать все значения и всегда устанавливает их на основе реального файла в данном пути.

Код: Выделить всё

#include 
#include 

namespace fs = std::filesystem;

class directory_provider {
public:
virtual std::vector list_dir(const fs::path& path) = 0;
};

class filesystem_provider : public directory_provider {
public:
std::vector list_dir(const fs::path& path) override {
return { fs::directory_iterator{ path }, fs::directory_iterator{} };
}
};

class mock_provider : public directory_provider {
public:
MOCK_METHOD(std::vector, list_dir, (const fs::path& path), (override));
};
Есть ли способ решить это, что позволяет мне вернуть Directory_Entry с произвольными значениями, такими как file_size и is_regular_file . В соответствии с этим, я даже не могу установить произвольный путь, не бросая файловую систему_error с «нет такого файла или каталога». В структуру я могу легко заполнить UT, в то время как другие обертывания Directory_Entry в полиморфический класс, который я могу издеваться. К сожалению, я измерил конверсии и/или полиморфизм, чтобы снизить пропускную способность производственного кода на целых 50% (все оптимизированные, рекурсивно тестируя на больших репозициях, таких как ядро ​​Linux).

Подробнее здесь: https://stackoverflow.com/questions/795 ... or-testing

Вернуться в «C++»