2010-07-30 84 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