Я использую C++ Test от Parasoft для модульного тестирования кода на C++. Я столкнулся со следующей проблемой. У меня есть функция, подобный следующему один (псевдокод):Как выполнить модульное тестирование методов, связанных с вводом файлов?
bool LoadFileToMem(const std::string& rStrFileName)
{
if(openfile(rStrFileName) == successfull)
{
if(get_file_size() == successfull)
{
if(read_entire_file_to_buffer() == successfull)
{
return true;
}
return false;
}
return false;
}
return false;
}
Мои вопросы в данном случае являются:
Должен ли я использовать заглушки для функций файловой системы? Или я должен включать определенные тестовые файлы для тестирования модульных тестов?
В моем случае класс std::fstream используется для ввода файлов.
Есть ли еще предложения? (Лучше всего, если это сделано в C++ Test, но не обязательно).
Вы правы, но буфер динамически распределяется так, чтобы быть равным размеру файла. Я немного упростил проблему [у меня есть заглушки для выделения памяти, но C++ Test не помогает мне создавать заглушки для методов класса fstream]. – INS
@ Iulian: динамическое распределение может по-прежнему терпеть неудачу (например, если вы запрашиваете 100 ГБ памяти), если вы взаимодействуете с данными, которые вы не контролируете, вы должны проверить, как ваш код обрабатывает данные, которые он не может обрабатывать (не работает ли он изящно или просто падает?). –
@John R Strohm: Это правильно в теории, но во многих случаях это избыток. Я не хочу поддерживать 1000 строк производственного кода + 20 000 строк тестового кода с собственным набором проблем и ошибок. Должен ли я писать тесты для тестового кода? Издевательство над сложной функцией - непростая задача. –