У меня есть код итерации по файлам с использованием 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