我应该使用什么策略来单元测试在ruby(rspec)中读取文件?

时间:2012-02-17 21:43:59

标签: ruby unit-testing mocking stubbing

我有一个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,任何帮助将不胜感激。感谢。

3 个答案:

答案 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,它会模拟文件系统的操作。