Создать 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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