У меня есть метод, рубиновый, который обрабатывает очень большой файл строку за строкой (т.е. я не могу загрузить файл в память), как следующее:Какую стратегию я должен использовать для модульной проверки чтения файла в ruby (rspec)?
def process_file
file = File.new(@@data_file, "r")
while (line = file.gets)
{ do something with the line } ...
end
file.close
return "upload complete"
end
В соответствии с передовой практикой, я не хочу этот метод должен иметь любую зависимость от файловой системы. Раньше я использовал заглушки, но я не уверен, как я буду использовать его здесь. Я бы предположил, что я буду использовать что-то эквивалентное:
file = File.stub!(:new).and_return({something})
Я просто не уверен, что это {что-то}.
Я использую rspect и любая помощь будет оценена. Благодарю.
Спасибо за ответ. То, что я пытаюсь проверить, это не файл ввода/вывода. То, что я пытаюсь проверить, - это то, что происходит с отдельными записями в файле (т. Е. В цикле). Я могу легко заглушить/издеваться над файлами. У меня возникают проблемы с запутыванием/издевательством - это открытие/закрытие самого файла. – Agazoom
@Agazoom: Хорошо, как насчет того, чтобы полностью удалить файл из уравнения? Операции с файлами работают как любая другая процедура ввода-вывода. Перейдите в издеваемый входной поток к алгоритму и убедитесь, что результат правильный. Он не должен быть файловым объектом, он просто должен иметь один и тот же интерфейс. –
Любые указатели на то, где я могу найти что-то подобное? Я новичок в рубине, поэтому любой источник, который вы можете предоставить, будет полезен. – Agazoom