簡體   English   中英

創建用於文件輸入的Ruby RSpec測試用例

[英]Create a Ruby RSpec test case for file input

我有一個文本文件,打算將其轉換為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

首先,當您需要實例變量( @log )時使用類變量( @@log )。 但是,實際上沒有理由使用兩者。

我會像這樣拆分這些方法,以便您可以單獨測試它們:

  • 一種將文件讀取到數組並返回數組的方法
  • 一種采用數組並按需要格式化它們的方法,返回格式化后的數組

現在,您的方法緊密耦合,因為它們都使用實例變量,這使測試變得比需要的難(您必須設置或偽造對第一個方法的調用才能開始測試第二個方法)。

您可以使用FakeFS之類的東西測試第一種方法,以讀取(假)文件的內容。 確實,盡管此方法應該相當簡單,並且您可能根本不必進行測試。

當您刪除第一種方法的聯軸器時,第二種方法更易於測試。 從您希望解析的文件中創建一個行數組,並將其傳遞給該方法,然后檢查結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM