1

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

4

3 回答 3

0

我认为这里不需要进行单元测试。您是否担心在某些未来版本的 Ruby 中创建文件/关闭文件会被破坏?不是的,不用担心。

让 Ruby 开发人员担心对他们的平台特定文件 IO 例程进行单元测试。您应该担心对您的算法进行单元测试,特别是那些关键和复杂的算法(即,如果您不小心,很容易损坏)。

也就是说,您可能应该只将一个块传递给构造函数。这可确保在块退出时为您关闭文件并且更惯用。

File.open(some_file_path, 'w+') do |file|
  file.puts('content')
end
于 2012-02-17T21:46:57.987 回答
0

你总是可以检查你是否调用了正确的方法,至少在close()之后。我认为这是 i/o 最常见的错误。

于 2012-02-17T21:49:53.917 回答
0

您可能想查看MockFS,它模拟了文件系统的操作。

于 2012-02-17T22:02:23.210 回答