Создать контрольный пример Ruby RSpec для ввода файла - PullRequest
0 голосов
/ 30 июля 2010

У меня есть текстовый файл, который я собираюсь преобразовать в формат CSV (в данном случае). Как создать правильный тест RSpec, чтобы увидеть, будет ли вывод в правильном формате для следующего сценария?

Это мой код:

class ProcessLog
    @@log = Array.new
    def read_log(log)
        if File.exists?(log) 
            f = File.open(log, "r")
        f.each_line { |line| @@log << line.strip }
        end
    end
    def process_log
       result = Array.new
       @@log.each do |line|
          <convert to csv>
          result << <converted to csv>
       end
       result
    end
end

describe ProcessLog do
    before do
        @pl = ProcessLog.new
        <help>
    end
    it 'should pass first format' do
        text = "Item X has a price of $ per gram" # just as an example
        <help>
        @pl.read_log("file.log")
        @pl.should == 'X,$,gram'
    end
end

1 Ответ

1 голос
/ 30 июля 2010

Во-первых, вы используете переменную класса (@@log), когда вам нужна переменная экземпляра (@log). Но на самом деле нет никаких оснований для использования.

Я бы разделил эти методы следующим образом, чтобы вы могли проверить их изолированно:

  • Один метод, который читает файл в массив и возвращает массив
  • Один метод, который принимает массив и форматирует его так, как вы хотите, возвращая отформатированный массив

В настоящее время ваши методы тесно связаны, поскольку они оба используют переменную экземпляра, и это делает тестирование сложнее, чем нужно (вы должны настроить или подделать вызов первого метода, чтобы начать тестирование второго) .

Вы можете протестировать первый метод с помощью чего-то вроде FakeFS , чтобы прочитать содержимое (поддельного) файла. Действительно, хотя этот метод должен быть довольно тривиальным, и вам, возможно, даже не придется его тестировать.

Второй метод легче проверить при удалении соединения с первым. Создайте массив строк из файла, который вы собираетесь анализировать, и передайте его методу и проверьте результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...