2011-11-14 67 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