我正在尝试测试一种使用 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 来存根该foreach
方法,这样我就可以process_csv
从我的测试中控制该方法的输入,而无需任何文件 I/O mumbo-jumbo。
所以测试会是这样的
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
数组变成 Mocha 可以使用的东西。我想我必须使用某种 proc 或 lambda,但我发现 procs、blocks 和 lambdas 的世界有点让人费解。