Я пытаюсь проверить метод, который использует 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
из моего теста без какого-либо файлового ввода-вывода 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
в то, с чем может работать Мокко. Я думаю, что мне нужно использовать какой-нибудь метод или лямбду, но я нахожу мир проков, блоков и лямбд немного изумительным.