CSV.foreachを使用してcsvファイルを読み込み、処理を行うメソッドをテストしようとしています。これは次のようになります。
require 'csv'
class Csv_processor
def self.process_csv(file)
begin
CSV.foreach(file) do { |row|
# do some processing on the row
end
rescue CSV::MalformedCSVError
return -1
end
end
end
CSV.foreachは、入力としてファイルパスを受け取り、ファイルを読み取り、コンマ区切り値を解析して、ファイル内の各行の配列を返します。各配列は、処理のためにコードブロックに順番に渡されます。
Mochaを使用してメソッドをスタブ化し、ファイルI /Omumbo-jumboなしでテストからメソッドforeach
への入力を制御できるようにします。process_csv
したがって、テストは次のようになります
test "rejects input with syntax errors" do
test_input = ['"sytax error" 1, 2, 3', '4, 5, 6', '7, 8, 9']
CSV.expects(:foreach).returns( ??? what goes here ??? )
status = Csv_processor.process_csv("dummy")
assert_equal -1, status, "Status does not indicate error: #{status}"
end
test_input
アレイをモカが使用できるものに変える方法が必要です。ある種のprocまたはlambdaを使用する必要があると思いますが、proc、blocks、およびlambdaの世界は少し気が遠くなります。