2010-07-30 37 views
0

我有一个文本文件,我打算将其转换为CSV(本例中)格式。如何创建适当的RSpec测试以查看输出是否适合以下场景的格式?为文件输入创建一个Ruby 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

首先,您使用的是类变量(@@log)当你想一个实例变量(@log)。但是真的没有理由使用。

我想起来拆分这些方法像这样,所以你可以在隔离测试他们:

  • 一种方法读取一个文件到一个数组中,并返回该数组
  • 一种方法,它有一个数组并将它们格式化你怎么想他们,因为他们使用的实例变量都现在你的方法是紧耦合的返回格式化阵列

,它使测试难度比它必须是(你必须设置伪造或假冒第一种方法的呼叫开始测试第二个)。

你可以用FakeFS这样的东西来测试第一个方法来读取(假)文件的内容。真的,虽然这种方法应该是相当平凡的,你可能不需要测试它。

第二种方法更容易测试,当您将耦合移除到第一个时。从您希望解析的文件创建一行数组,并将其传递给方法,并检查结果。

+0

非常类似于我以前的版本。 但后来,我最终添加了几个方法,需要日志,我想删除将日志作为参数传递给所有方法的依赖性。 : - \ – 2010-07-30 15:26:06