我有一个ruby方法,它逐行处理一个非常大的文件(即我无法将文件加载到内存中),如下所示:
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})
我只是不确定{something}是什么。
我正在使用rspect,任何帮助将不胜感激。感谢。
答案 0 :(得分:0)
我认为这里不需要进行单元测试。在某些未来的Ruby版本中,您是否害怕创建文件/关闭文件?不是,不用担心。
让Ruby开发人员担心单元测试他们的平台特定文件IO例程。您应该担心单元测试算法,特别是那些关键且复杂的算法(如果您不小心,则容易出现破损)。
那就是说,你应该只是将一个块传递给构造函数。这可确保在块退出时为您关闭文件并且更加惯用。
File.open(some_file_path, 'w+') do |file|
file.puts('content')
end
答案 1 :(得分:0)
您可以随时检查是否调用了正确的方法,至少是close()
之后。我认为这是i / o最常出现的错误。
答案 2 :(得分:0)
您可能希望查看MockFS,它会模拟文件系统的操作。