1

次のように、非常に大きなファイルを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

ファイルシステムの操作を模擬するMockFSを参照してください。

于 2012-02-17T22:02:23.210 に答える
0

少なくともclose()その後、適切なメソッドを呼び出すかどうかをいつでも確認できます。i/o で最も頻繁に発生するエラーだと思います。

于 2012-02-17T21:49:53.917 に答える