#c
Вопрос:
У меня есть класс, который принимает строковый путь в своем конструкторе:
class S
{
public:
S(const std::stringamp; path)
{
assert(std::filesystem::exists(path));
}
};
Я хочу провести модульное тестирование этого, используя путь, который существует только временно.
Похоже, единственный способ создать уникальную временную папку-это использовать boost::filesystem
:
TEST(MyTest)
{
using bf = boost::filesystem;
const bf::path tempPath = bf::unique_path() /= bf::path("file.txt");
std::ofstream(tempPath.string(), std::ios::out | std::ios::binary);
S s(tempPath.string());
}
Однако утверждение срабатывает, потому что этот путь не существует.
Я злоупотребляю этим, или есть правильный способ сделать это?
Комментарии:
1. Я не
boost::filesystem
очень хорошо знаю, ноbf::unique_path() /= bf::path("file.txt");
выглядит неправильно. Я бы ожидалbf::unique_path() / bf::path("file.txt");
или простоbf::unique_path() / "file.txt";
— Отредактировал: Нет. Кажется, это правильный способ добавления к пути вboost::filesystem
2. Вы используете уникальный путь в качестве каталога. Этого каталога, вероятно, не существует, что означает, что вам сначала нужно его создать.
3. @Someprogrammerdude Я думал, что unique_path — это создание уникального временного каталога? Я не хочу явно создавать папку, мне просто нужна любая временная папка, поместите туда мой файл, и он будет удален после теста.
4. @user997112 Нет, только имя. »
unique_path
Функция генерирует имя пути, подходящее для создания временных файлов, включая каталоги »5. @user997112 Я еще так далеко не заходил 🙂 Если нет — просто инкапсулируйте его в класс RAII. Правка: У меня болит голова каждый раз, когда я пытаюсь читать
boost
документацию. :-/ Я бы сделал обертку, чтобы удалить файл после использования.