2011-11-14 111 views
1

我使用clamp - 我的ruby應用程序的命令行框架,我不確定如何啓動我的鉗形對象進行單元測試。我夾物體看起來像這樣單元測試命令行界面

class myCommand < Clamp::Command 
    parameter "first", "first param" 
    parameter "second", "second param" 

    def execute 
    #Data 
    end 
end 

,並通過命令行,像這樣

$~> myCommand first second 

目前運行,在我的RSpec測試即時通訊有直接設置對象的屬性,像這樣。

before(:each) do 
    $stdout = StringIO.new 
    @my_command = myCommand.new("") 
    @my_command.first= "first" 
    @my_command.second= "second" 
end 

,這並不似乎是啓動測試夾具對象的正確方法,但我不能確定正確的方法來做到這一點。想知道有沒有人有任何想法。由於

回答

2

所以,你正在做的是:

  • 創建命令的情況下就可以了
  • 設置屬性調用#execute

這是一個很好的方式來測試夾具命令,並且可能是單元測試您的方法的邏輯的最佳方法。

如果您想測試命令行參數的解析,您可以練習#parse方法,並檢查屬性值,例如

before do 
    @command = MyCommand.new("my") 
end 

describe "#parse" do 

    before do 
    @command.parse(["FOO", "BAR"]) 
    end 

    it "sets attribute values" do 
    @command.first.should == "FOO" 
    @command.second.should == "BAR" 
    end 

end 

但是這開始測試鉗自己,而不是你自己的代碼......所以我可能不會打擾。

如果你想測試兩種分析和執行一起,你可以試試:

describe ".run" do 
    context "with two arguments" do 
    it "does something useful" do 
     MyCommand.run("cmd", ["ARG1", "ARG2"]) 
     # ... test for usefulness 
    end 
    end 
end 

此外,雖然,您目前正在測試的方式是完全正常的。我希望有所幫助。

+0

很好的答案,正是我在找的東西。我只對測試execute方法中的代碼感興趣,所以在「before」方法中尋找一種更簡潔的方法來初始化我的命令對象。我將使用@ command.parse來幫助我做到這一點。 – namtax